altimateai/creating-dbt-models
| (1) Creating new models (any layer - discovers project's naming conventions first) (2) Task mentions "create", "build", "add", "write", "new", or "implement" with model, table, or SQL (3) Modifying existing model logic, columns, joins, or transformations (4) Implementing a model from schema.yml specs or expected output requirements Discovers project conventions before writing. Runs dbt build (not just compile) to verify.
npx skills add https://github.com/AltimateAI/data-engineering-skills --skill creating-dbt-models
Read before you write. Build after you write. Verify your output.
dbt build after creating/modifying models - compile is NOT enoughdbt show - don't assume successcat dbt_project.yml
find models/ -name "*.sql" | head -20
Read 2-3 existing models to learn naming, config, and SQL patterns.
# Find models with similar purpose
find models/ -name "*agg*.sql" -o -name "*fct_*.sql" | head -5
Learn from existing models: join types, aggregation patterns, NULL handling.
# Preview upstream data if needed
dbt show --select <upstream_model> --limit 10
Follow discovered conventions. Match the required columns exactly.
dbt compile --select <model_name>
This step is REQUIRED. Do NOT skip it.
dbt build --select <model_name>
If build fails:
Build success does NOT mean correct output.
# Check the table was created and preview data
dbt show --select <model_name> --limit 10
Verify:
For models with calculations, verify correctness manually:
# Pick a specific row and verify calculation by hand
dbt show --inline "
select *
from {{ ref('model_name') }}
where <primary_key> = '<known_value>'
" --limit 1
# Cross-check aggregations
dbt show --inline "
select count(*), sum(<column>)
from {{ ref('model_name') }}
"
For example, if calculating total_revenue = quantity * price:
Before declaring done, re-read the original request:
Take altimateai/creating-dbt-models from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.