DAGL

Give your AI steps the structure dbt gave SQL.

DAGL is a development environment for AI data pipelines. Sources, samples, prompts, budgets and versions are typed objects you can review. The grid is the surface your domain experts already read.

Read the docs Try it on your data →
supplier_check.daglexample
source suppliers = duckdb("suppliers.parquet")
sample pinned = suppliers.cases("expected.csv")

step read_cert = extract(suppliers.certificate_pdf,
    fields: [standard, sites, expires])

prompt decision = ask(
    "Does {read_cert} meet {policy}?",
    model: env.AI_MODEL,
    answers: [Approve, Review, Reject])

budget run <= $5.00, month <= $200.00
test   decision ~ pinned.expected >= 0.95

Every step has a type.

Sources, SQL, formulas, prompts and the ranker run in dependency order, and each one can be reviewed on its own.

Sample before you spend.

Frozen samples and pinned cases with expected answers. Every change runs on them first.

A cost plan before each run.

Budgets at three levels, a receipt for every run, and reuse of unchanged results.

Workbooks as text.

Every check is a text file you keep under version control and review in a pull request.

Self-hosted, on DuckDB and Parquet.

Run DAGL next to your data. No keys live in workbooks.

An API and your scheduler.

Call checks through the token API, or from Dagster, Prefect or Airflow.

Run it from the tools you already schedule.

Call any check through the token API, or run it from Dagster, Prefect or Airflow.

curl -X POST https://api.dagl.example/v1/runs \
  -H "Authorization: Bearer $DAGL_TOKEN" \
  -d '{"check": "supplier_check", "version": 5,
       "plan_only": true}'

# → 412 rows · 380 reused · est. $0.07
Compared with scriptsDAGL and in-house scripts: when to use each Read the comparison →

Start with the docs.

Or bring one pipeline your experts check by hand, and build it with us.

Try it on your data → Read the docs