Skip to content
Ayman DiabMTL

W-05 · Case study

NIC — Agents That Recommend, Humans Who Decide

Tech lead on a production AI-agent platform for ArcelorMittal Canada’s mining operations — where every agent recommends and every decision stays human.

Role
Tech lead — application and API architecture
Timeframe
2025 — present
Tags
production AI · industrial systems · agent design

Context

Mont-Wright is the largest open-pit iron mine in Canada — 24 square kilometres, in operation since 1974. Its haul trucks weigh 400 tonnes and each carries roughly 5,000 litres of oil and 5,000 litres of diesel. A reliability engineer watches the state and routes of the fleet from a screen.

The hard problem in that environment is not the alarm that fires. It is the reading that looks fine.

A conventional threshold asks one question: is this value out of range? An oil level of 90% is not out of range, and no threshold worth having would fire on it. It is only wrong if you also know the truck just came out of the garage — where it should have left full. The signal isn’t in the number; it’s in how the number disagrees with the context around it.

What I built

NICNotre intelligence collective — a platform of AI agents deployed across ArcelorMittal Canada’s mining operations, built at HalfSerious. I joined the project in July 2025, saw it into production, and still maintain it.

I owned the application and API side end to end and made the architecture calls on it — I was there to take whatever decision the work needed. The significant ones went to the chief architect and the C-suite, and they came back approved. Having that backing is what let the rest of the work move.

The agents surface suggested procedures to the reliability engineers responsible for the equipment, and they reach those people as a conversation in Teams — inside the tool the work already happens in, rather than behind another dashboard nobody has time to watch. The exchange runs both ways: an engineer can push back on what an agent says, and the agent can disagree.

The detection work itself belongs to our data team, who own the machine learning behind it. My half of the system was everything around that: the application, the API surface, and the seam where the two meet.

Design decisions

The agents recommend. They never decide.

In an environment where a wrong automated action can spill five thousand litres of oil onto the ground or put a driver in danger, the question is not whether a system could act on its own but what the autonomy would buy, and what it would cost the day the system is confidently wrong. Recommending costs a human’s attention. Acting costs whatever the mistake costs. At this scale those are not comparable numbers, so the agent’s job ends at the recommendation and a person carries the decision.

The constraint does something less obvious, too. An agent that acts turns its operator into an auditor of completed actions. An agent that recommends keeps them the decision-maker — which is the only position from which someone can meaningfully disagree.

The hard part was never the AI. It was agreeing on what deserves a human’s attention.

An agent that treats a 90% oil reading and a catastrophic alarm as the same class of event fails in both directions at once: it buries the emergency and it trains people to ignore the warning. Getting that distinction right isn’t a technical problem. It’s a question about how the operation actually works, and the answer lives in the heads of the people running it.

So most of my contribution wasn’t code; it was holding a shared picture of how the system should behave across three groups who each saw a different part of it — the application side, the data team, and the client’s own operations — and keeping that picture intact while the details underneath it kept changing.

The hardest version of that sat on one seam: what an agent should say to an engineer, against what the detection side could actually support. Those are two different questions. One is about a conversation someone is going to have in the middle of a shift; the other is about what the data will bear. Agreeing where they meet meant settling, case by case, what an agent could assert outright, what it had to hedge, and where the honest answer was that it doesn’t know. Neither team owned both halves of that, which is why it kept needing someone standing there.

An agent is, in the end, a statement about what you believe is worth interrupting a human for. That statement has to be agreed before anything gets built, and it has to survive everyone’s separate understanding of it.

Impact

On 10 March 2026, while I was leading the platform, an agent flagged a truck leaving the garage with its oil at 90% — reasoning that a truck coming out of maintenance should be full. The reliability engineer relayed it to the driver, who checked, saw no leak, and carried on. The agent held its position. The engineer sent the truck back to the garage.

There was a leak.

Averted: an oil spill into the environment, an engine failure on a unit that costs about a million dollars to replace, and a situation that could have put the driver at risk. ArcelorMittal’s VP of digital transformation put the avoided cost at “several millions of dollars in direct and indirect impacts.”

The same executive is careful about the arithmetic, and the caution is worth repeating: with a mine that normally breaks an engine or two a year and none broken by spring, it is genuinely hard to attribute that record to the agents alone. Absence of failure is weak evidence. What is not in doubt is the specific truck on the specific day — an anomaly nobody was looking for, surfaced to someone who could act on it, and a human making the call to send it back.

That last part is the whole design. The system was right, and it still didn’t get to decide.

Reported by Les Affaires (opens in a new tab) (in French).