# AI on the Probe

## Inference happens on the node

Axiom Border can detect anomalies with machine-learning models, and the important word is **where**: the
models run **on the probe**, in containers on the same machine. There is no call to an external service,
no data sent away to be scored, and no dependency on a link being up.

That follows from the same premise as everything else here. A probe that had to reach a hosted model to
decide would be a probe that stops deciding the moment the link drops — and would mean the traffic
patterns of an isolated industrial network leaving it in order to be analysed.

The images the models run from are installed with the product, so an air-gapped probe can train and infer
with nothing fetched from anywhere.

## The circuit, end to end

```mermaid
flowchart LR
    D["Agent data<br>on the probe"] --> T["Trainer<br>container"]
    T --> M["Model<br>on the probe"]
    R["Rule"] -->|asks| M
    M -->|anomaly| R
    R --> A["Alarm"]
```

**Training.** The probe exports the data it holds for one agent and hands it to that agent's trainer
container. Retraining is scheduled rather than manual, can be cancelled while it runs, and its state is
kept — so you can tell a model that is training from one that failed to.

**Inference.** The rule for an agent asks the model to score what it just received. If the answer comes
back as an anomaly, **the same rule raises the alarm**.

**And that alarm is an alarm like any other.** It goes through the same coalescing gate described in
[From event to alarm](../alarms/) — same identity rules, same count, same acknowledgement behaviour. An
anomaly detected by a model is not a second class of signal with its own inbox; it lands on **Alerts**
beside everything else, and an operator does not need to know which mechanism produced it to act on it.

**Health.** A rule can also read the model's own metrics, and the probe polls the models' health
endpoints. This matters more than it sounds: a model that has stopped answering is then an **observable
fact** rather than a silence that looks exactly like "no anomalies today".

## Where you manage it

**AI capabilities** in the console lists the models and trainers configured on the probe:

{{< staticImage "edge_products/axiom_border/console-ai-capabilities.png" "The AI capabilities view, listing the models and trainers on the probe" >}}

Adding one walks a wizard: upload the trainer package, or pick one already on the probe, and choose the
agent it applies to.

{{< staticImage "edge_products/axiom_border/wizard-ai-trainer.png" "Adding an AI capability: the trainer package and the agent it applies to" >}}

Deploying, restarting, deleting and importing images are all driven from here. The rule that calls the
model is enabled in step with the capability itself, so a model you deploy is a model that gets asked.

{{% notice style="warning" title="Linux, and the central role only" icon="triangle-exclamation" %}}
The container runtime the models need is **Linux-only**, and only the **central** role installs it. A
monitoring node does not run models, and neither does a probe running natively on Windows — which is a
development scenario, not a supported production one. On such a host the AI capability simply does not
start, and the deployment controls have nothing behind them.

If you intend to use anomaly detection, deploy the probe as **central** on Linux.
{{% /notice %}}

Full operating detail — image formats, the training cycle, calling inference from a rule — is in
[AI capabilities](../../ai_capabilities/).

**Next:** [Security posture](../posture_and_storage/) — the probe's own attack surface, and where each kind
of data lives.
