From drt-hub
Walks a drt setup through a top-to-bottom diagnostic checklist when something is off but the failing layer isn't obvious.
How this skill is triggered — by the user, by Claude, or both
Slash command
/drt-hub:drt-troubleshootThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically isolate which layer of a drt setup is failing, then hand off
Systematically isolate which layer of a drt setup is failing, then hand off the specific fix.
/drt-debug is reactive — the user has an error message and wants it fixed.
/drt-troubleshoot is for when the symptom is vague ("nothing happens",
"the data looks wrong", "I just set this up and want to confirm it works").
Walk the layers top to bottom, confirming each one is green before
moving on. The first layer that fails is where the problem lives — stop
there and fix it (or invoke /drt-debug for a known error pattern).
Run these in order. Each step has a "✅ green when" condition — only proceed to the next step once the current one is green.
drt doctor
Checks Python version, the ~/.drt/profiles.yml file, the active
drt_project.yml, installed extras, and common env-var gotchas (v0.7+).
drt-core[<extra>] for your connector;
~/.drt/profiles.yml not found (run drt init); wrong Python (<3.10).drt profile list # confirm the profile in drt_project.yml exists
drt profile show <name> # inspect it (secrets masked)
echo "$YOUR_PASSWORD_ENV" # confirm the referenced env vars are actually set
drt_project.yml exists in
profiles.yml, and every ${VAR} / *_env it references resolves to a
non-empty value in the shell.drt run --profile <name>
or DRT_PROFILE to override); env var unset or exported in a different
shell; secret hardcoded in YAML instead of an env reference (drt validate
flags this since v0.7.5).drt profile test <name> # round-trip the SOURCE connection (SELECT 1)
drt validate # also surfaces connection issues where supported
drt profile test is the cheapest way to separate "can't reach the
warehouse" from "the data is wrong" — it runs a real connection check against
the source. For the destination side, drt validate exercises a live
connection where supported; otherwise a one-off manual check works (psql /
curl -X POST <url> / the warehouse console).
GOOGLE_APPLICATION_CREDENTIALS unset or pointing at
a stale keyfile; for non-US BigQuery datasets, a missing location.drt validate # JSON-Schema + semantic checks on every sync YAML
drt list # confirm your sync is actually discovered
drt validate reports 0 errors and drt list shows the
sync you expect.syncs/; YAML indentation; a
model: ref('table') pointing at a table that doesn't exist; an
upsert/mirror mode without the required upsert_key; deprecation
warnings (v0.7.2+) that will become errors.drt run --select <name> --dry-run # config parses, rows extract, nothing is written
drt run --select <name> --dry-run --diff # record-level preview for queryable destinations (v0.7.1+)
This is the single most useful step for "the sync runs but the data looks wrong" — it shows exactly what would be written without touching the destination.
--diff look correct.model filters
everything out, or mode: incremental already consumed the watermark —
check drt status, replay with --cursor-value); {{ row.field }}
referencing a column the source doesn't return (use tojson_safe for
datetime/Decimal/UUID, v0.7.6+); wrong column names in the template.drt run --select <name> --verbose # row-level error detail
drt status # what actually happened
drt status --output json # machine-readable, for CI
result.success equals the dry-run row count and
result.failed is 0.rate_limit.requests_per_second;
HubSpot max 9/s, GitHub Actions 5/s); per-row auth/permission errors
(on_error: skip to see the full failure count instead of stopping at the
first); partial success where some rows fail validation downstream.sync.dlq.enabled: true + on_error: skip, v0.8+) so failed records
persist to .drt/dlq/<sync>.jsonl instead of being dropped. drt status
shows the queue depth; drt retry <sync> re-sends just the failures once
you've fixed the root cause. See docs/guides/dead-letter-queue.md.drt test --select <name> # freshness / unique / accepted_values tests, if defined
unique /
freshness tests fail — the data moved but isn't what was expected. This
usually points back to the source query (step 5), not the sync itself./drt-debug for the known-pattern
fix.drt doctor, the sync YAML,
drt_project.yml, and drt run --verbose --output json output, and open a
discussion / issue with that bundle.docs/llm/CONTEXT.md — architecture and key conceptsdocs/llm/API_REFERENCE.md — all config fieldsdocs/connectors/ — per-connector auth, sync modes, and gotchas/drt-debug — the companion skill for fixing a specific error once this
checklist has localised itnpx claudepluginhub drt-hub/drtDebug and fix failing drt syncs. Covers auth errors, rate limits, connection timeouts, template errors, and provides step-by-step diagnosis using drt doctor and verbose/dry-run modes.
Debugs and fixes failing drt syncs, diagnosing auth errors, rate limits, connection timeouts, template errors, and configuration issues.
Diagnoses dbt Cloud/platform job failures by analyzing run logs, querying Admin API, reviewing git history, and investigating data issues. For unclear or intermittent errors.