An AI copilot that triages OT/ICS security alerts. It reads an alert from an industrial network, adds context about the assets involved, looks up current threat intelligence, maps the activity to MITRE ATT&CK for ICS, and gives a security analyst a verdict, evidence and recommended next steps. It recommends. It never acts.
Built for the Nebius x NVIDIA Global AI Hackathon, track Best Apps and Agents, on NVIDIA Nemotron models served by Nebius Token Factory.
Demo | How it works | Nemotron and Nebius | Results | Test plant | Run it | All documentation
| Live demo | http://sentinelot.213-239-174-15.sslip.io/ (backup: http://213.239.174.15) |
| Demo video | https://youtu.be/G8_dhWq9-PM |
| Source code | https://github.com/ToniGift/sentinelOT |
Served over plain HTTP. If your browser warns, choose Continue to site. No login or personal data is involved.
For an alert reporting five failed RDP logins followed by a successful login to the SCADA server from the VPN pool, SentinelOT returned, in 29 seconds:
- Verdict: escalate, priority P1, confidence 90%, because a service account that had never logged in interactively reached a high-criticality SCADA server
- Mapped to: MITRE ATT&CK for ICS T0822 External Remote Services and T0859 Valid Accounts
- Next steps: two read-only checks and four actions that need operator approval
More on the Examples page, including a routine engineering change that it rates likely benign.
An ordinary Python program runs five AI agents in a fixed order: Intake, Intel, ATT&CK mapper, Triage analyst and Response advisor. The Tavily search runs beside the mapper to save time. After each step, code (not the model) removes sources that were never retrieved and technique IDs that do not exist, makes sure the verdict agrees with the priority, and flags instructions hidden in alert text. Every suggested action is labelled read-only or needs operator approval.
The agents and every check are described on the How it works page.
| Technology | What it does in SentinelOT |
|---|---|
| NVIDIA Nemotron 3 Ultra | Makes the main triage decision: verdict, priority, confidence and evidence |
| NVIDIA Nemotron 3 Super | Runs the four faster steps: intake, intel summary, ATT&CK mapping and response advice |
| Nebius Token Factory | Serves all five model calls through one OpenAI-compatible API, using the standard openai Python SDK. The large model takes the hard decision and the smaller one the quick steps. By our estimate a full triage costs about 1 to 1.5 cents. |
| Nebius AI Cloud | The public demo runs in Docker on a Nebius AI Cloud virtual machine. |
| Tavily Search API | Supplies live threat intelligence. Searches go first to trusted sites (CISA, MITRE ATT&CK, NVD, CVE.org), results from other sites are labelled unverified, and code removes any cited link that was not actually retrieved. SentinelOT searches published advisories. It does not scan any network. See what Tavily returned for a real example. |
What we learned. The small Nemotron 3.5 Lightning model spent many reasoning tokens on simple extraction and made the first step slow, so we moved that step to Super. Reasoning tokens count against the output limit, so our client allows generous output sizes and parses the JSON from the reply.
More detail is on the Nemotron and Nebius page. Our build log and our feedback on Nebius, NVIDIA and Tavily are in NOTES.md.
- Fresh held-out set (10 scenarios, 3 runs each): 29 of 30 verdicts correct, 28 of 30 technique choices acceptable
- Prompt injection: 0 of 10 injected runs followed the hidden instruction
- Speed: median 26 seconds per alert across 66 runs
These were measured on the original eight-asset test plant, with synthetic alerts written with AI assistance (Claude), then reviewed and run by me. SentinelOT is a research prototype, not a production security tool. How the numbers were produced, and their limits, are on the Evaluation page.
- Lab alerts. Test SentinelOT on alerts from my own home lab (LabShock with an ELK stack), instead of only alerts written with AI assistance.
- A shadow-mode trial, with permission, on a company's past and already labelled alerts: an analyst's decision next to SentinelOT's, with nothing acted on.
- IT alerts. The pipeline is not specific to OT, but this has not been built or tested. See Beyond OT.
SentinelOT is tested against a fictional packaging plant: fourteen assets across six levels. Every name, address and alert is invented.
| Level | Assets |
|---|---|
| 4 enterprise | Office PC |
| 3.5 DMZ | Jump server, patch server, historian replica |
| 3 operations | Engineering workstation, historian |
| 2 supervisory | HMI, SCADA server |
| 1 control | Two PLCs, one RTU |
| 0 field | Remote I/O module, variable frequency drive, sensor gateway |
The full table with addresses and criticality, and a zone diagram, are on the Test plant page.
| I want to... | Go to |
|---|---|
| test it once it is running | Testing the demo |
| see the full Nemotron, Token Factory, Nebius and Tavily details | Nemotron and Nebius |
| read the build log and our feedback on Nebius, NVIDIA and Tavily | NOTES.md |
| see what a result looks like | Examples |
| understand the problem and what it does not do | About |
| see how the five agents and the code checks work | How it works |
| understand the web page and its API | Web interface |
| run it myself | Run it yourself |
| see the fictional plant it is tested on | Test plant |
| read the numbers and the limits | Evaluation |
You need Docker, a Nebius Token Factory API key and a Tavily API key.
git clone https://github.com/ToniGift/sentinelOT.git
cd sentinelOT
copy .env.example .env # Linux/macOS: cp .env.example .env
# open .env, add your two API keys and fill in the MODEL_* model names, then:
docker compose up --build
Then open http://localhost. Running without Docker, the settings and the server setup are on the Run it yourself page.
SentinelOT is released under the MIT License (see LICENSE). It uses MITRE ATT&CK® for ICS data. ATT&CK® is a registered trademark of The MITRE Corporation, and this project is not affiliated with or endorsed by MITRE. See docs/NOTICE.md for MITRE's terms and other third-party notices.
Built by Anthony Afonughe, an OT/ICS security practitioner, for the Nebius x NVIDIA Global AI Hackathon.