Nagi
Nagi is a data reconciliation engine that declaratively defines the desired state of data and continuously performs evaluation and convergence.
Motivation
A successful job does not guarantee that data is as expected. Even when a job completes normally, data can be stale, contain NULLs, or have inconsistent aggregations.
Nagi starts by evaluating whether data is as expected. It continuously evaluates the desired state of data and, when drift is detected, runs the convergence operation defined for it. With desired states and convergence operations declared up front, Nagi unifies state evaluation, routine Extract/Load/Transform, and incident response into a single loop.
Traditional Approach
graph LR
subgraph Orchestrator
Schedule["Schedule /<br/>Event trigger"] --> Run["Run job"]
Run --> JobFail{"Job failed?"}
JobFail -->|No| Test["Data test"]
Test --> DataFail{"Data corrupted?"}
DataFail -->|No| Schedule
JobFail -->|Yes| Alert["Alert"]
DataFail -->|Yes| Alert
end
subgraph Human["User"]
Investigate["Investigate & fix"]
end
Alert --> Investigate
Investigate --> Orchestrator
Nagi Approach
graph LR
subgraph Nagi
Eval["Evaluate data state"]
Drift{"Diverged from<br>desired state?"}
Conv["Run convergence<br>operation"]
end
subgraph User
Define["Define desired state<br>of data"]
end
subgraph UserAI["User / AI Agent"]
Check["Check state"]
end
Define --> Eval
Eval --> Drift
Drift -->|No| Eval
Drift -->|Yes| Conv
Conv --> Eval
Nagi -->|"Alert"| UserAI
UserAI -->|"Manual operation"| Nagi
Principles
- Declarative — Define the desired state; let Nagi handle convergence.
- Composable — Use with your existing tools, or let Nagi take the wheel.
- AI-collaborative — Designed for humans and AI agents to work as one.
What's Next
- Concepts — Learn how the Reconciliation Loop works