<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Emmanuel Joshua</title>
    <description>The latest articles on DEV Community by Emmanuel Joshua (@emmanuel_joshua_b3935fe49).</description>
    <link>https://dev.to/emmanuel_joshua_b3935fe49</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3738602%2F189d38dd-703d-443f-82f4-804022f36e51.jpg</url>
      <title>DEV Community: Emmanuel Joshua</title>
      <link>https://dev.to/emmanuel_joshua_b3935fe49</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/emmanuel_joshua_b3935fe49"/>
    <language>en</language>
    <item>
      <title>We Asked SigNoz How to Flag a Hallucinating Agent. They Said "We Haven't Figured That Out." So We Did.</title>
      <dc:creator>Emmanuel Joshua</dc:creator>
      <pubDate>Sat, 25 Jul 2026 15:49:16 +0000</pubDate>
      <link>https://dev.to/emmanuel_joshua_b3935fe49/we-asked-signoz-how-to-flag-a-hallucinating-agent-they-said-we-havent-figured-that-out-so-we-105c</link>
      <guid>https://dev.to/emmanuel_joshua_b3935fe49/we-asked-signoz-how-to-flag-a-hallucinating-agent-they-said-we-havent-figured-that-out-so-we-105c</guid>
      <description>&lt;p&gt;&lt;em&gt;By Team ThunderBoltz · Agents of SigNoz Hackathon · Track 1: AI &amp;amp; Agent Observability&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the kickoff Q&amp;amp;A for the Agents of SigNoz hackathon, we asked the SigNoz team a question we'd been chewing on: how do you flag an AI agent that hallucinates? Their answer, on the record: "We haven't figured that out yet."&lt;/p&gt;

&lt;p&gt;So we spent the next five days figuring it out. This is the story of &lt;strong&gt;SentinelX&lt;/strong&gt; — a predictive observability platform that catches AI hallucinations in real time, predicts outages before they happen, and lets agents write their own dashboards — all on SigNoz, deployed via Foundry, with agents that read and write through the MCP server.&lt;br&gt;
Why this matters (it's not theoretical)&lt;/p&gt;

&lt;p&gt;AI agents are shipping answers to real users right now. A legal copilot cites a court case that doesn't exist in a real brief. A triage bot invents a dosage. A support agent promises a refund the company never authorized. And the systems they run on fail silently: a connection pool exhausts at 3 a.m. while every dashboard still reads green and the on‑call engineer is still asleep.&lt;/p&gt;

&lt;p&gt;Traditional observability catches failures after they happen. We wanted to catch lies the instant they're born, and predict failures before the alert fires. SentinelX does both, using three AI agents that talk to SigNoz through its MCP server — reading telemetry the way a senior SRE would, and writing dashboards no human ever clicked into existence.&lt;/p&gt;

&lt;p&gt;Deploying SigNoz via Foundry (and the boot bug that nearly killed us)&lt;br&gt;
We deployed SigNoz the way the hackathon rules require: through Foundry, with a casting.yaml and a committed casting.yaml.lock so anyone can reproduce the stack from scratch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# casting.yaml (simplified)&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Installation&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sentinelx-signoz&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deployment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker&lt;/span&gt;
    &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;compose&lt;/span&gt;
  &lt;span class="na"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And then, at 2 a.m. on the first night, the collector came up with an empty pipeline. No OTLP receivers. No traces. Just a health check saying "Everything is ready" while port 4318 accepted TCP connections and returned nothing.&lt;br&gt;
The root cause was a chicken‑and‑egg at startup: the backend's OpAMP config channel refuses to serve a collector until an organization exists in the database, but the organization doesn't exist until you create the first admin user through the UI — which you can't do until the backend is fully up. The collector, waiting on a channel that wasn't serving, fell back to a nop (no‑operation) pipeline with zero receivers.&lt;br&gt;
The fix was two‑fold: provision a root admin user through environment variables so the org exists at boot, and add a compose.override.yaml that drops the --manager-config flag from the ingester so it uses its own static receiver config instead of waiting on OpAMP:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# pours/deployment/compose.override.yaml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sentinel-signoz-signoz-0&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SIGNOZ_USER_ROOT_ENABLED=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SIGNOZ_USER_ROOT_EMAIL=admin@sentinel.dev&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SIGNOZ_USER_ROOT_PASSWORD=&amp;lt;secure-password&amp;gt;&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SIGNOZ_USER_ROOT_ORG_NAME=default&lt;/span&gt;
  &lt;span class="na"&gt;ingester&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;-c&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;/signoz-otel-collector migrate sync check &amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="s"&gt;/signoz-otel-collector --config=/etc/otel-collector-config.yaml --copy-path=/var/tmp/collector-config.yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That override is committed and documented. If you're deploying SigNoz via Foundry and your collector comes up with no receivers, this is the boot race to watch for. Provision the root user before you cast.&lt;/p&gt;

&lt;p&gt;The Hallucination Radar — turning "is the model lying?" into a metric&lt;br&gt;
The core insight: a hallucination isn't a vague vibes problem. It's a grounding problem. If an AI's response contains information not supported by the context it was given, that's measurable.&lt;br&gt;
So we built a two‑model design. A RAG agent answers a question using retrieved context. Then a separate LLM — a "critic" — re‑reads that answer against the sources and scores how much of it is ungrounded, from 0.0 (fully grounded) to 1.0 (completely fabricated). The score is emitted as a real OpenTelemetry span attribute:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gen_ai.evaluation.hallucination_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gen_ai.evaluation.hallucination_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gen_ai.evaluation.method&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm_critic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That single attribute is the bridge between "an LLM said something sketchy" and "a queryable, graphable, alertable metric in SigNoz." In the Traces explorer, you can click any hallucination_radar.evaluate span and read the score and the critic's one‑line reason. From there we built it up the stack the way an on‑call engineer would:&lt;br&gt;
A three‑panel dashboard in the Query Builder: a high‑risk count (Value panel), a risk‑over‑time series (Time Series), and a table of the exact fabrications caught (Table), all scoped to name = 'hallucination_radar.evaluate' AND gen_ai.evaluation.hallucination_score &amp;gt; 0.7.&lt;br&gt;
A traces‑based alert that fires the moment a score crosses 0.8.&lt;br&gt;
A hallucination went from being an invisible failure — the kind that ships to a customer — to being something you can graph, threshold, and get paged about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oracle — predicting the outage before the alert&lt;/strong&gt;&lt;br&gt;
For the predictive agent, we simulated one of the most common production failures: connection‑pool exhaustion. A pool is a fixed set of reusable database connections; a "leak" is a bug where connections are checked out but never returned, so the occupied count climbs toward the hard ceiling. When it hits the max, new requests block and the app appears to die — usually at 3 a.m., usually while every dashboard still reads green because no threshold has been crossed yet.&lt;br&gt;
We added a db_pool_active gauge to our target app (exported over OTLP to SigNoz every 10 seconds) and a /chaos/leak endpoint that simulates the leak. Then Oracle reads that time‑series straight out of SigNoz through the MCP tool signoz_query_metrics:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query_metrics&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;metricName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;db_pool_active&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;timeRange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;30m&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;requestType&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;time_series&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It runs a linear regression on the data points (numpy polyfit), computes the slope and an R² confidence, and solves (threshold − current) / slope for the minutes until breach. The prediction is emitted as its own span (oracle.predict) with attributes like sentinel.prediction.minutes_until_breach and sentinel.prediction.confidence.&lt;/p&gt;

&lt;p&gt;The key distinction: a normal threshold alert is reactive — it fires when you're already in the danger zone. Oracle is predictive — it warns while the pool is still at 50, totally "fine," no alert anywhere, and says "you have 18 minutes." That gap is the window where a human can fix the leak calmly instead of getting paged mid‑outage.&lt;/p&gt;

&lt;p&gt;Scribe — agents that write observability&lt;br&gt;
Read is half the loop. Write is the other half. Scribe builds a full dashboard payload — title, widgets, queries, layout — and posts it to SigNoz through the MCP tool signoz_create_dashboard:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signoz_create_dashboard&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🛡️ SentinelX — Auto-Generated&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;layout&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;   &lt;span class="c1"&gt;# server auto-places panels
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;widgets&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# 3 widgets: value, time-series, table
&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The dashboard appears in SigNoz. No human opened the UI. No human clicked a panel. An agent built the observability itself. Read and write over the same MCP bridge.&lt;/p&gt;

&lt;p&gt;The debugging journey (the details only someone who did it would know)&lt;br&gt;
No hackathon story is honest without the walls. Here are ours:&lt;br&gt;
The IPv6 trap. On Windows, localhost resolved to ::1 (IPv6), but Docker mapped the OTLP port on IPv4 only. Our Python exporter silently dropped every trace until we pinned 127.0.0.1 in every endpoint. If your OTLP exports vanish on Windows Docker Desktop, check this first.&lt;br&gt;
The Gemini quota death. Our first LLM backend (Gemini 2.0 Flash free tier) hit a hard‑zero quota mid‑build — limit: 0, not "try tomorrow." We abstracted the LLM layer (sentinel_core/llm.py) so the project could swap to OpenRouter without rewriting the agents. That abstraction also gave us an offline demo mode for recording.&lt;br&gt;
The MCP 403. Our service account authenticated fine (tools/list returned 41 tools) but every data query returned 403: only viewers/editors/admins can access this resource. The key was valid; the role was missing. &lt;/p&gt;

&lt;p&gt;Creating an Admin service account through the SigNoz UI fixed it in 60 seconds. If your MCP reads 403, check the role, not the key.&lt;/p&gt;

&lt;p&gt;The 200‑field schema. signoz_create_dashboard has a deeply nested schema where every widget must carry query, selectedLogFields, selectedTracesFields, thresholds, contextLinks — and query must include queryType, promql, clickhouse_sql, and builder all present, even the empty ones. We read the full inputSchema from tools/list, built a _widget() factory that hardcodes every required empty field, and Scribe's dashboard landed on the first attempt.&lt;/p&gt;

&lt;p&gt;What we learned (and what we'd tell our past selves)&lt;br&gt;
What worked: Foundry for reproducible deployment (the casting.yaml.lock is a gift for judges). The MCP server as the agents' eyes and hands — read and write over one bridge. The hallucination_score attribute as the bridge between LLM evaluation and observability. And the community: the SigNoz Slack team (Nagesh, Chethan, Bishal, Vibhu) pointed us at the root‑user fix that unblocked the entire stack. That single nudge was the turning point.&lt;/p&gt;

&lt;p&gt;What didn't: Trusting localhost on Windows. Assuming the free LLM tier would hold. Assuming MCP auth "just works" (it needs a role). And trying to hand‑craft a 200‑field dashboard payload from memory instead of reading the schema first.&lt;/p&gt;

&lt;p&gt;What we'd tell our past selves: "The collector's OpAMP boot race will eat your first night. Provision the root user before you cast. Pin 127.0.0.1 in every OTLP endpoint. And read the MCP schema before you write the payload."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We set out to answer one question from the kickoff — how do you flag an agent that hallucinates? — and to give autonomous systems the instruments they shipped without. SentinelX catches the lie, predicts the fire, and writes the dashboard. All on SigNoz, all via Foundry, all with agents that read and write.&lt;/p&gt;

&lt;p&gt;The question was "how do you flag a hallucinating agent?" Consider it answered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Emman-code" rel="noopener noreferrer"&gt;
        Emman-code
      &lt;/a&gt; / &lt;a href="https://github.com/Emman-code/sentinelx-signog" rel="noopener noreferrer"&gt;
        sentinelx-signog
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🛡️ Sentinel — Predictive Observability for the Agentic Era&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Agents of SigNoz · Track 01 (AI &amp;amp; Agent Observability)&lt;/strong&gt; · by &lt;strong&gt;&amp;lt;YOUR NAME / TEAM&amp;gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"How do you flag an agent that hallucinates?"&lt;/em&gt; — asked in the kickoff Q&amp;amp;A
The SigNoz team's answer: &lt;strong&gt;"We haven't figured that out yet."&lt;/strong&gt;
&lt;strong&gt;Sentinel is the answer.&lt;/strong&gt; It detects AI hallucinations in real-time and
predicts production failures &lt;em&gt;before&lt;/em&gt; alerts fire — and its agents &lt;strong&gt;read and
write&lt;/strong&gt; SigNoz through the MCP server.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Emman-code/sentinelx-signog/docs/architecture.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FEmman-code%2Fsentinelx-signog%2FHEAD%2Fdocs%2Farchitecture.png" alt="architecture"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What Sentinel does&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;Agent&lt;/th&gt;

&lt;th&gt;Role&lt;/th&gt;

&lt;th&gt;SigNoz surface&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;🎯 &lt;strong&gt;Hallucination Radar&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;

&lt;td&gt;A live LLM &lt;em&gt;critic&lt;/em&gt; scores every AI reply 0–1 for grounding; the score ships as the OTel attribute &lt;code&gt;gen_ai.evaluation.hallucination_score&lt;/code&gt; → dashboard + alert.&lt;/td&gt;

&lt;td&gt;traces · dashboard · alert&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;🔮 &lt;strong&gt;Oracle&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;

&lt;td&gt;Pulls a metric trend via MCP, runs linear regression, and predicts the threshold breach &lt;strong&gt;minutes before any alert&lt;/strong&gt; (with an R² confidence).&lt;/td&gt;

&lt;td&gt;metrics (MCP read) · prediction spans&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;📝 &lt;strong&gt;Scribe&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;

&lt;td&gt;Auto-generates a&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;…&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Emman-code/sentinelx-signog" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Demo video: &lt;a href="https://youtu.be/WFIE3YkhWT0" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://youtu.be/WFIE3YkhWT0" rel="noopener noreferrer"&gt;https://youtu.be/WFIE3YkhWT0&lt;/a&gt;&lt;br&gt;&lt;br&gt;
SigNoz: signoz.io · Foundry docs · MCP server

&lt;p&gt;&lt;em&gt;Built for the Agents of SigNoz hackathon by Team SentinelX. AI coding assistants were used to accelerate implementation; all architecture decisions, debugging, and verification were performed by the team. Disclosed per hackathon rules.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opentelemetry</category>
      <category>signoz</category>
      <category>observability</category>
    </item>
  </channel>
</rss>
