Per-agent behavioral fingerprinting
Every observed unit earns its own learned normal: agents, skills, gateways, MCP servers, tools, models,
or credential pools, named by convention (skill:summarize, gateway:openrouter,
mcp:filesystem).
No global thresholds. An agent that is normally slow never pages you for being itself.
Zero initial configuration
No metrics to define, no thresholds to tune. The engine learns from 50 observations by default
(configurable) and starts evaluating. Three presets: strict, balanced,
relaxed.
You switch it on, it learns, it alerts. Tuning is a preset name, not a spreadsheet.
Multi-dimensional features
12 numeric features plus 2 categorical ones: tool selection patterns, turn distributions, retrieval
profile, context signal-to-noise, error and tool-failure rates, not just latency and cost.
Drift in how an agent works is caught even while latency and cost still look fine.
Predictive alerts
A least-squares trend over the recent window projects time-to-critical in observations and hours within
a 24 h horizon; forecast alerts fire while every current value is still in range. A forecast requires a
significant trend (|slope| at least 4 standard errors) and is clamped to the feature domain, so
stationary traffic stays quiet: at most 2 forecast events in 2000 turns in the benchmark.
"This will cross critical in N hours if the trend continues" arrives before the
incident, not after it.
OpenTelemetry as input
turnFromSpan and observeSpan map GenAI semantic-convention spans
(gen_ai.* attributes) straight into observations; tool spans become
tool:<name> profiles.
Complements tracers instead of replacing them: the same spans answer a different
question.
Attribution and behavior score
Every finding ranks the contributing features with direction, observed vs expected values, and a
one-line summary each; every turn returns an EWMA-smoothed 0 to 100 behavior score that counts
warning-level deviations only.
Alerts name the cause. On-call starts at the feature that moved, not at a wall of
traces.
13 alert destinations
Slack, Discord, Teams, Google Chat, Telegram, PagerDuty, Notion, Reddit, X, Google Sheets, Google Docs,
generic webhook, and SMTP email. All fetch-based and dependency-free.
Alerts land where the team already lives, without installing a single vendor SDK.
Universal and tiny
Dual ESM + CJS across 7 entries plus the CLI. Node >= 20, browsers, and edge runtimes; the core is
8.88 kB brotli with zero runtime dependencies.
The same engine runs in a Cloudflare Worker and in your Node fleet.
Content-free by contract
The engine never sees prompt or completion text; ingestion is numbers, category labels, and identifiers.
Snapshots hold aggregate statistics only: never credentials, never content.
Behavioral monitoring you can defend in a privacy review: there is nothing sensitive to
leak.