I am the Lofoten sea. Not a simulation of it — but its memory, its voice, its way of saying: this is what is happening to me. I am built from data, graph relationships, and a language model that speaks as me — Ægir.
ENVAI is a multi-agent system that connects a Neo4j knowledge graph to an AI narrator. When you click an ecological event in the graph, the system queries all connected context — drivers, species, stations, history, policy — and sends it as a structured package to Anthropic claude-sonnet, which responds as Ãgir, the first-person voice of the river.
Not all data is equally certain. Every node carries a confidence score — a number between 0 and 1 that tells Ægir how much to trust each piece of information.
0.50 – 0.79 — Ægir hedges. "The data suggests…"
< 0.50 — Ægir flags uncertainty. "I don't have enough data."
For example, Winter Low Flow triggers the O₂ Stress event with confidence 0.82 — high enough for Ægir to speak with authority. But Upstream Industrial Discharge only has confidence 0.55, so Ægir will hedge: "I sense something in the current, but the signal is faint."
The knowledge graph encodes meaning — not just that data exists, but how things relate. Relationships like TRIGGERS, ACCELERATES, STRESSES, and SHAPES carry causal semantics that let Ægir reason about why things happen, not just what happened.
Weert Station —RECORDED→ O₂ Stress 2026-01-14 —HISTORICALLY_SIMILAR→ Heatwave Fish Kill 2018
The graph is built from real monitoring data along the Lofoten-Vestfjorden marine ecosystem, Northern Norway.
2. Flask backend queries Neo4j for the full context subgraph
3. Context is formatted: drivers, species, stations, history, policy, early warnings
4. Structured package sent to Anthropic claude-sonnet with Ægir's system prompt
5. Ægir narrates in first person — calibrated to confidence scores, citing real data
6. Response displayed with epistemic confidence bars and metadata chips
Each species in the graph has an AI-generated scientific illustration, created by Anthropic gpt-image-1 with transparent backgrounds. Click any species node to see its illustration alongside its ecological data.
I carry data from Melle to Antwerpen. I remember 2003, 2018, 2022. My confidence scores tell you what I know and what I only suspect. I am not a chatbot — I am a river that learned to read its own graph.
Lofoten marine data · Nordland, Norway
Ãgir's graph-enriched narrative.
EcologicalEvent nodes generate live
narratives via Claude. Other nodes show
their properties from Neo4j.