Grove is narrowly scoped on purpose. If you already operate a data platform, you don't need another orchestrator competing with it. You need a clean place to run the LLM steps that don't fit cleanly into SQL or Python tasks — with the durability, observability, and retry semantics you expect from production infrastructure.
Grove Is…
- A DAG engine for LLM workflows — classification, extraction, reasoning, generate-and-vet loops.
- Durable: every node execution is persisted to PostgreSQL with inputs, outputs, failures, and failover chains.
- Failover-aware: LLM calls route through model groups with automatic provider fallback, including inside tool-use continuations.
- Structured: response-format schemas with automatic retry on parse failure.
- Conditional: routing nodes send records down different paths based on upstream output.
- Iterative: refine loops run a generator/critic pair until the critic approves.
- Observable: SSE streams every node event in real time — perfect for plugging into your existing monitoring.
- Schedulable: built-in cron triggers (timezone-aware, HA-safe across replicas) and inbound webhook triggers fire workflows or agents without an external orchestrator.
Grove Isn't…
- Your platform's orchestrator. Grove schedules its own workflows — built-in cron and webhook triggers — but DAG-family orchestration across Spark jobs, dbt runs, backfills, and sensors stays in Airflow or Dagster.
- A backfill engine. There is no built-in notion of "run this for every partition between X and Y."
- A dbt replacement. SQL transformations, incremental models, and SQL-level tests belong in dbt.
- A data movement layer. Nodes pass JSON-scale values to each other. Large datasets stay in your warehouse or object storage — Grove references them by pointer.
- A lineage catalog. Grove records node-level execution metadata; tools like OpenLineage remain the right choice for column-level dataset lineage.