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.
Grove Isn't…
- A scheduler. Grove runs on demand; use Kubernetes CronJobs, Airflow, or your existing orchestrator to trigger it.
- 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.