▸ probing model registry … LNN · KAN · FNO · DCFF-MTAD
▸ mounting replay clock … 2023-11-20 → 27
▸ arming autonomous watchdog … 9 triggers
▸ isolation check … acting agents sealed from operator input ✓
▸ demo mode … no live agents · baked replay snapshot
Offline demo · no agents running

A neuro-symbolic decision OS
that runs a wind farm, and proves every decision.

Three neural surrogates (failure · power · wake) feed an exact symbolic optimiser (LP · MILP · payback gate). A two-agent LLM pipeline turns state into deterministic tool calls, and an isolated autonomous watchdog runs that pipeline with no human in the loop when the farm crosses a threshold. Every neural claim is cross-checked against FLORIS physics before it is allowed to act. It all runs locally, on the edge.

▶ Enter live replay ★ View on GitHub
6
turbines · Kelmarsh replay
3+1
neural surrogates + FLORIS oracle
9
autonomous triggers
~9%
FNO power vs FLORIS
Problem statement

A control room juggles four questions on four different clocks.

Each is normally a separate tool with a separate dashboard and a human stitching them together. That human is the bottleneck, and the single point of failure.

Which turbine is about to fail?
condition monitoring · days–weeks
What will we make now, at what wear cost?
power + degradation · seconds–minutes
Should we steer wakes to recover energy?
wake optimisation · minutes
What's the cost-optimal plan for tomorrow?
scheduling vs prices · hours
Proposed solution

One closed loop. Three load-bearing layers.

Edge-Cortex stitches all four questions into a single loop and puts an autonomous agent on top. The coupling is bidirectional: the neural side writes the optimiser's objective, and the symbolic side governs and vetoes the neural side. Neither half is decorative; delete either and the system stops working.

NEURO

Learned surrogates

LNN failure, KAN power, FNO wake: fast enough to call inside an optimiser loop, exported to ONNX with custom Fourier operators for the edge.

SYMBOLIC

Exact optimisation & physics

Trust-region LP, day-ahead MILP, and a payback gate, all fed by the surrogates, plus a FLORIS physics oracle that vetoes any wake claim that disagrees on sign.

AGENTIC

Intent to deterministic action

A Director to Operations pipeline translates state into typed tool calls and governs when to act. It runs on machine triggers, never on operator keystrokes.

Architecture

How a signal becomes a proven action.

feedback to SCADA · every step audited Autonomous watchdog 9 machine triggers Director parse intent to task spec 7 closed intents, CoT Operations ReAct, 22 tools EXECUTE / RECOMMEND + conf Neural surrogates LNN · KAN · FNO (ONNX) FLORIS physics oracle Optimisers LP · MILP · payback gate EXECUTE / RECOMMEND DuckDB audit every step logged ◇ ISOLATION BOUNDARY · no operator path into the acting agents reads live state Q&A Operator human Read-only assistant answers questions, never acts
Neuro writes symbolic: the LP's objective gradients are the FNO Jacobian + KAN diagonal. Symbolic governs neuro: the trust-region ρ-test, FLORIS veto, closed intent vocabulary and payback gate constrain what the surrogate is allowed to do.
Features · the neuro layer

Four learned models, one physics oracle.

LIQUID NEURAL NETWORK

LNN-RUL

Per-turbine remaining-useful-life + P(fail in 7/30/60 d), with an attention readout. Trained on ~28 M rows of Kelmarsh SCADA.

weights/lnn_kelmarsh.onnx
KOLMOGOROV–ARNOLD

KAN-Power

Analytical-symbolic power model P(wind, yaw) with extractable gradients that feed the wake-steering LP.

weights/kan_power_v1.onnx
FOURIER NEURAL OPERATOR

FNO-Wake

Full 128×128 wake-velocity field over the farm, supplying cross-turbine coupling. Structured lifting on the real Kelmarsh layout.

weights/fno_surrogate_v1.onnx
MULTIVARIATE ANOMALY

DCFF-MTAD

Per-turbine anomaly scores against a learned threshold; correlated flags escalate to the watchdog.

weights/dcff_mtad.pt
ENGINEERING PHYSICS

FLORIS oracle

Not learned. The ground-truth validator: every wake claim is re-simulated, and a sign-mismatch plan never executes.

installed package
Honest uncertainty. Split-conformal gives a distribution-free 90% RUL interval. The finding that the point estimate is weak (±~1227 h) while the failure-probability heads carry the decision is shown, not hidden.
Live replay · interactive

The operations HUD, replayed in your browser.

Every panel below is driven by a baked replay of the real SCADA window. Scrub the week; the wake field, KPIs, prices and failure risk all move with the clock, and the autonomous watchdog fires on its own as thresholds are crossed. No server, no model, no agent is running: it's a truthful snapshot, not a live system.

Replay · baked snapshot
Mon 20 Nov · 00:00 replay clock · 2023-11-20 00:00 UTC
AUTONOMY · ARMED · 9 TRIGGERS
Farm output
·· MW
Revenue
·· €/h
Net profit
·· €/h
Margin
·· %
FNO wake field · 128×128u/u∞
Spatial farm overviewwind ··
Per-turbine RUL · LNNhours + P(fail)
KAN power surface · P(ws, yaw)MW
Day-ahead price · ENTSO-E·· €/MWh
Anomaly severity · DCFF-MTADvs threshold 0.50
Neuro-symbolic verdict · current plan
✓ FLORIS-VERIFIED ⏸ HOLD
Recent autonomous actions
Watching for triggers…
Trajectory terminalidle
No pipeline run yet. Scrub to a trigger.
Operator assistantREAD-ONLY

Isolation by design: the assistant answers questions but has no path to command the acting agents. Actions come only from the watchdog.

Autonomous functionality

It acts on its own, with judgment, and in isolation.

A deterministic watchdog (not an LLM) watches the replay clock for 9 triggers across 6 kinds. When one fires it runs the same Director→Operations pipeline in a thread. If the result is EXECUTE and confidence ≥ 0.70, the action stands and is tagged ⚡ EXECUTED; otherwise it downgrades to a logged recommendation.

TriggerConditionSource
Imminent failureP(fail ≤ 7 d) over 0.70 for any turbineLNN head
Failure warningP(fail ≤ 30 d) rising past its alert levelLNN head
Anomaly root-causescore reaches 85% of the learned thresholdDCFF-MTAD
Correlated anomalytwo or more turbines flagged at onceDCFF-MTAD
Price spikeprice departs the 24 h mean by over 2σENTSO-E
Wake lossfarm-wide wake deficit reaches 6%FNO
Wind shiftdirection moves over 30° within an hourOpen-Meteo
Heartbeat sweeptimed periodic health checkreplay clock

◆ Isolation is a safety property, not a limitation

The agents that take actions are sealed off from every operator and user input path. There is no command box, no one-click "run the agents", no way for a human to inject an instruction into the acting pipeline. Operators observe, and ask questions through a separate read-only assistant. This removes an entire class of abuse/attack surface: you cannot socially-engineer, prompt-inject, or fat-finger an autonomous action into existence.

Tools

Everything the agent can do is a deterministic MCP tool.

The Operations agent orchestrates 22 tools across 13 MCP servers in a Thought→Action→Observation loop, then summarises citing tool-derived numbers only.

SENSING

State & market

Farm snapshot · Historical weather · Day-ahead prices

INFERENCE

Surrogates

RUL forecast (conformal) · KAN gradient · Wake-coupling Jacobian · Anomaly detection · Wake simulation

DECISION

Optimise

Wake-steering solver (LP + payback gate) · Day-ahead scheduler (MILP)

FORENSICS

Signal analysis

Datasheet query · FFT · Band power · Cross-correlation · Window comparison

REPORTING

Audit & export

Dashboard render · Report export · Event log · Logbook query · Period summary

EDGE RUNTIME

ONNX + custom ops

Surrogates compiled to ONNX with native Fourier spectral-conv operators, validated to ~1e-6 parity vs PyTorch.

LLMs

Local & quantised

qwen3.5:4b-mxfp8 for the task agents · lfm2.5-thinking:1.2b for read-only chat · all on Ollama, no API in the loop.

DATA

Live + replayed

ENTSO-E day-ahead · Open-Meteo weather · Kelmarsh SCADA, all pinned to one replay clock.

Benefits

What it offers.

◆ Closed loop, not four dashboards

SCADA → LNN → LP → setpoints → SCADA, with the market and the wear cost inside the same objective.

◆ Physics- and economics-vetoed

No plan executes if FLORIS disagrees on sign, or if the payback gate says the wind won't hold long enough to repay the wear.

◆ Runs on the edge

Small quantised LLMs + ONNX surrogates. No cloud dependency in the control loop.

◆ Fully audited

Every decision, human-driven or autonomous, is written to DuckDB with replay-time, and is queryable by the agent itself.

◆ Honest about uncertainty

Calibrated conformal intervals are surfaced, and the self-execute gate holds at ≥ 0.70 confidence; everything else is a recommendation.

◆ Safe by isolation

Autonomous actors have no operator input path: a structural guarantee, not a policy you have to trust.

Potential expansion

Where it goes next.

Everything below is future work, not shipped today: the roadmap the current architecture is built to grow into.

01

More sites & turbine models future

The structured FNO lifting and typed physics interfaces generalise beyond Kelmarsh: retarget the layout, keep the loop.

02

Storage & grid-services co-optimisation future

Fold battery dispatch and ancillary-service markets into the same MILP objective.

03

Full model-predictive control future

The payback gate is MPC step one; extend to a receding-horizon controller over the wind forecast.

04

Richer causal forensics future

Deeper datasheet-grounded root-cause analysis linking anomalies to component-level failure modes.

05

Self-maintenance & continual learning future

The system maintains itself: it watches its own models for drift, decides when to retrain (humans only label), validates against FLORIS, and redeploys, adapting to the site with less ML babysitting over time.