<?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: srinath thota</title>
    <description>The latest articles on DEV Community by srinath thota (@tsrinath).</description>
    <link>https://dev.to/tsrinath</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%2F4140353%2F732f42e5-7400-4ddb-a914-a168d1577a02.jpg</url>
      <title>DEV Community: srinath thota</title>
      <link>https://dev.to/tsrinath</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tsrinath"/>
    <language>en</language>
    <item>
      <title>I Gave My AI Assistant a Memory — It Started Calling Out My Broken Promises</title>
      <dc:creator>srinath thota</dc:creator>
      <pubDate>Tue, 29 Sep 2026 18:23:15 +0000</pubDate>
      <link>https://dev.to/tsrinath/i-gave-my-ai-assistant-a-memory-it-started-calling-out-my-broken-promises-3kj8</link>
      <guid>https://dev.to/tsrinath/i-gave-my-ai-assistant-a-memory-it-started-calling-out-my-broken-promises-3kj8</guid>
      <description>&lt;p&gt;&lt;em&gt;How I built Ahead, a Hindsight-powered pre-meeting agent that remembers what was promised, finds what is overdue, and turns context into action.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By Srinath&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most AI meeting assistants can summarize what just happened. Far fewer can answer the question that matters before the next meeting: &lt;strong&gt;what did I promise this person, and did I actually do it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The best meeting brief is not the one with the most information. It is the one that prevents the next avoidable mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  A forgotten promise is more dangerous than a bad meeting
&lt;/h2&gt;

&lt;p&gt;A meeting can go perfectly and still damage a relationship weeks later. The problem is usually not a dramatic failure. It is the technical document you said you would send by Friday. The pricing discussion you agreed to revisit next quarter. The introduction you promised to make and then forgot. Each item looks small in isolation, but together they decide whether a client sees you as reliable.&lt;/p&gt;

&lt;p&gt;Most AI meeting assistants are good at summarizing what just happened. Far fewer can answer the more important question before the next meeting: what did I promise this person, and did I actually do it?&lt;/p&gt;

&lt;p&gt;That gap led me to build &lt;strong&gt;Ahead&lt;/strong&gt;, an AI pre-meeting briefing agent powered by Vectorize Hindsight. Its job is simple: know what matters before you meet — and never let the same promise be broken twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  A fluent agenda is useless if it forgets the relationship
&lt;/h2&gt;

&lt;p&gt;Ask a stateless assistant to prepare you for a meeting and it can produce a polished list of generic prompts: ask about priorities, understand the current stack, discuss next steps. The answer sounds professional, but it has no relationship-specific stakes.&lt;/p&gt;

&lt;p&gt;In Ahead's seeded demo, Jordan Reyes has a history across several meetings. Pricing was intentionally postponed. An integration concern came up. Most importantly, a technical follow-up document was promised within 48 hours and was never sent.&lt;/p&gt;

&lt;p&gt;A generic assistant does not know any of that. It prepares you as if you are meeting Jordan for the first time. Ahead instead leads with the overdue commitment, because that is the fact most likely to shape the conversation. The difference is not better wording. It is memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design thesis:&lt;/strong&gt; relationship context is valuable only when it changes what the user does next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ahead turns memory into a pre-meeting safety net
&lt;/h2&gt;

&lt;p&gt;Ahead creates a dedicated Hindsight memory bank for each contact. Meeting notes, decisions, promises, and outcomes are retained as relationship history. When a user clicks &lt;strong&gt;Brief me&lt;/strong&gt;, the app retrieves the most relevant evidence, checks for outstanding commitments, and generates a concise executive brief.&lt;/p&gt;

&lt;p&gt;The brief is intentionally action-oriented. It can surface overdue promises that need to be acknowledged immediately, topics that were postponed and are now ready to revisit, a recommended opening for the first minute, and the raw memories behind every warning.&lt;/p&gt;

&lt;p&gt;From the same screen, the user can draft an accountable follow-up email. Ahead does not hide behind corporate language; it restates what was promised and moves the user toward a concrete resolution. It can also create an account handoff brief for a new owner, combining relationship history, open commitments, client priorities, and a first-week action plan.&lt;/p&gt;

&lt;p&gt;This changes the product from a passive summary tool into a follow-through system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Retain, recall, reflect: a clean lifecycle for agent memory
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Retain&lt;/strong&gt; — store meetings, decisions, promises, dates, and outcomes as durable relationship history.&lt;br&gt;
&lt;strong&gt;Recall&lt;/strong&gt; — retrieve the evidence relevant to today's meeting, including unresolved actions and timing.&lt;br&gt;
&lt;strong&gt;Reflect&lt;/strong&gt; — reason across the full bank to produce strategic guidance and account handoffs.&lt;/p&gt;

&lt;p&gt;The sequence matters: retain creates durable history, recall grounds the immediate answer, and reflect converts accumulated history into judgment. Groq then formats that grounded context into the final user-facing brief and follow-up actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The demo makes the value of memory visible
&lt;/h2&gt;

&lt;p&gt;I wanted the difference between "AI with context" and "AI with memory" to be obvious, so Ahead presents them side by side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without memory:&lt;/strong&gt; a polished but generic agenda — ask about priorities, the current stack, and next steps. It treats every interaction as day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Hindsight:&lt;/strong&gt; an evidence-backed brief that surfaces the overdue document, the postponed pricing discussion, and the right opening for the meeting.&lt;/p&gt;

&lt;p&gt;In the Jordan demo, the most important item is impossible to miss: an overdue commitment appears in a high-priority callout. The brief also recommends addressing the missed document before moving to a new agenda.&lt;/p&gt;

&lt;p&gt;Just as important, Ahead shows its work. The &lt;strong&gt;Memory Found&lt;/strong&gt; inspector displays the raw recalled memories, while &lt;strong&gt;Why this brief?&lt;/strong&gt; presents an audit trail: the earlier meeting, the promise, whether it was fulfilled, and why it matters now.&lt;/p&gt;

&lt;p&gt;That transparency was deliberate. A relationship warning can change how someone opens a high-stakes conversation. Users should not have to trust an unexplained model output when the underlying evidence can be shown directly.&lt;/p&gt;

&lt;p&gt;After the brief, Ahead connects memory to action. The user can generate a follow-up email, create a handoff brief, review a chronological meeting timeline, or open a dashboard that audits commitments across every contact bank. The product moves from one meeting to an organization-wide view of reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transparency is a feature.&lt;/strong&gt; The model summarizes; the memory inspector preserves the source evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture stays deliberately small
&lt;/h2&gt;

&lt;p&gt;Ahead is built as a single full-stack Next.js 14 application with TypeScript and route handlers. Hindsight is the long-term memory layer, and Groq is used for language-model synthesis. The current architecture does not require a separate application database for relationship memory.&lt;/p&gt;

&lt;p&gt;Each contact has an isolated bank. API routes call Hindsight to retain new events, recall relevant facts, and reflect across history. The app then uses a language model to structure the result into sections such as overdue items, topics to revisit, strategic opening advice, and a relationship summary.&lt;/p&gt;

&lt;p&gt;A critical implementation decision was to detect overdue commitments from recalled evidence &lt;strong&gt;before&lt;/strong&gt; asking the language model to write the brief. The model helps synthesize and communicate; it is not treated as the source of truth. That separation makes the system easier to inspect and reduces the chance that a polished sentence is mistaken for a stored fact.&lt;/p&gt;

&lt;p&gt;The application also handles failure explicitly. If memory or model services are unavailable, the interface reports the problem instead of silently inventing context. For a product built around trust, an honest error is better than a confident hallucination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One contact, one memory boundary.&lt;/strong&gt; Isolating every relationship in its own bank prevents unrelated histories from bleeding into each other and gives each retrieval a clear scope. The same pattern scales from an individual brief to a portfolio audit without losing provenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful memory must be scoped, inspectable, and tied to action
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Memory needs boundaries.&lt;/strong&gt; One bank per contact prevents unrelated histories from bleeding into each other and gives every retrieval a clear scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Memory needs provenance.&lt;/strong&gt; Users should be able to inspect the event behind a summary. Timestamps, raw recalled text, and an explanation chain make the system accountable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Memory should end in action.&lt;/strong&gt; Follow-up drafts, opening advice, handoff plans, and the commitments dashboard turn a remembered promise into a next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The user must close the loop.&lt;/strong&gt; Ahead can retain a new outcome and detect whether an older commitment was resolved. Without updates, even a sophisticated memory system becomes stale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger opportunity is organizational follow-through
&lt;/h2&gt;

&lt;p&gt;Ahead began as a pre-meeting briefing tool, but the architecture points to a broader use case. Relationships survive team changes, account handoffs, and long gaps between conversations. The knowledge needed to protect them is usually scattered across notes, inboxes, and individual memory.&lt;/p&gt;

&lt;p&gt;A shared, evidence-backed memory layer can make that history operational. A new account owner can see what matters in their first week. A manager can review commitments across a portfolio. A team can distinguish promises made by them from actions expected from the client. The goal is not to remember everything. It is to remember the obligations that shape trust.&lt;/p&gt;

&lt;p&gt;That is the idea behind Ahead: the best meeting brief is not the one with the most information. It is the one that prevents the next avoidable mistake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Know what matters before you meet. Never break a promise twice.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Live demo: &lt;a href="https://ahead-u.vercel.app/" rel="noopener noreferrer"&gt;https://ahead-u.vercel.app/&lt;/a&gt;&lt;br&gt;
Source code: &lt;a href="https://github.com/tsrinath2007/Ahead" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Ahead&lt;/a&gt;&lt;br&gt;
Hindsight: &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;https://github.com/vectorize-io/hindsight&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>TigerGraph Agentic Fraud Investigation Hackathon 2026 Team GOA-T</title>
      <dc:creator>srinath thota</dc:creator>
      <pubDate>Fri, 25 Sep 2026 05:50:15 +0000</pubDate>
      <link>https://dev.to/tsrinath/tigergraph-agentic-fraud-investigation-hackathon-2026team-goa-t-4chl</link>
      <guid>https://dev.to/tsrinath/tigergraph-agentic-fraud-investigation-hackathon-2026team-goa-t-4chl</guid>
      <description>&lt;h2&gt;
  
  
  Team
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thota Sai Eswar Srinath&lt;/strong&gt; — Team Leader &amp;amp; Agentic Architecture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nikhil Kadiri&lt;/strong&gt; — Graph Systems &amp;amp; TigerGraph Traversal Engineering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bondugula Pranav Teja&lt;/strong&gt; — Policy Engine &amp;amp; GraphRAG Implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Cockpit:&lt;/strong&gt; &lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/tsrinath2007/Task-4" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Task-4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark Report:&lt;/strong&gt; &lt;code&gt;docs/BENCHMARK_REPORT.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo Script:&lt;/strong&gt; &lt;code&gt;docs/DEMO_VIDEO_SCRIPT.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  A Fraud Score Isn't an Investigation
&lt;/h1&gt;

&lt;p&gt;Modern fraud detection systems can assign a risk score to every transaction.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction Risk Score: 0.87
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But a risk score alone doesn't answer the questions an investigator actually needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is this transaction suspicious?&lt;/li&gt;
&lt;li&gt;Has this card interacted with other suspicious accounts?&lt;/li&gt;
&lt;li&gt;Is the device being used by multiple customers?&lt;/li&gt;
&lt;li&gt;Has this device appeared in previous fraud cases?&lt;/li&gt;
&lt;li&gt;Is this an unusual transaction or simply legitimate travel?&lt;/li&gt;
&lt;li&gt;Is this a recurring subscription?&lt;/li&gt;
&lt;li&gt;What action should the bank take?&lt;/li&gt;
&lt;li&gt;Does the action require human approval?&lt;/li&gt;
&lt;li&gt;Should a regulatory report be generated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem becomes significantly harder when fraud is not isolated to one transaction.&lt;/p&gt;

&lt;p&gt;A fraud ring might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer A
    |
  Card A
    |
Transaction
    |
 Device X
   / | \
  /  |  \
Card B Card C Card D
  |     |     |
 ...   ...   ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single suspicious transaction can therefore be connected to dozens or even hundreds of other entities.&lt;/p&gt;

&lt;p&gt;This is where we saw an opportunity for graphs.&lt;/p&gt;




&lt;h1&gt;
  
  
  Introducing SENTINEL
&lt;/h1&gt;

&lt;p&gt;We built &lt;strong&gt;SENTINEL&lt;/strong&gt;, a graph-native autonomous fraud investigation system designed to investigate suspicious transactions using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TigerGraph&lt;/strong&gt; for multi-hop relationship analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; for live graph investigation tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphRAG&lt;/strong&gt; for historical case retrieval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic fraud detectors&lt;/strong&gt; for explainable pattern detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A deterministic policy engine&lt;/strong&gt; for action and approval decisions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM synthesis&lt;/strong&gt; for human-readable explanations and regulatory narratives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An interactive analyst cockpit&lt;/strong&gt; for investigation and visualization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key architectural principle was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Let the graph gather evidence, let deterministic code enforce policy, and let the LLM explain the result.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The LLM is deliberately &lt;strong&gt;not&lt;/strong&gt; allowed to decide whether a card should be blocked or which approval route should be assigned.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Built
&lt;/h1&gt;

&lt;p&gt;SENTINEL is an end-to-end investigation system composed of eight major components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Live TigerGraph Savanna Cloud + MCP Client&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid GraphRAG Memory&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eight Deterministic Fraud Detectors&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legitimacy Checklist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deterministic Policy Engine&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Next-Best Action Engine&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM Synthesis Layer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive Analyst Web Cockpit&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our evaluation used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;590,742 IEEE-CIS / Vesta transactions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5,565 closed historical cases&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;20 benchmark cases (&lt;code&gt;HHG-001&lt;/code&gt; → &lt;code&gt;HHG-020&lt;/code&gt;)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A live TigerGraph graph containing approximately &lt;strong&gt;1.45 million transaction vertices&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benchmark validation suite produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 / 20 PASS
100% policy validation pass rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark also covered both fraudulent and legitimate behavior, allowing us to test whether the system could avoid blindly treating every anomaly as fraud.&lt;/p&gt;




&lt;h1&gt;
  
  
  Architecture Overview
&lt;/h1&gt;

&lt;p&gt;At a high level, SENTINEL follows this pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌───────────────────────┐
                    │      ALERT TRIGGER    │
                    │ Risk Score / Dispute  │
                    │ Analyst Escalation    │
                    └───────────┬───────────┘
                                │
                                ▼
                    ┌───────────────────────┐
                    │   TIGERGRAPH + MCP    │
                    │                       │
                    │ Customer Cards        │
                    │ Card History          │
                    │ Shared Devices        │
                    │ Prior Cases           │
                    └───────────┬───────────┘
                                │
                                ▼
                    ┌───────────────────────┐
                    │   EVIDENCE ENGINE     │
                    │                       │
                    │ 8 Fraud Detectors     │
                    │ Legitimacy Checks     │
                    │ GraphRAG Retrieval    │
                    └───────────┬───────────┘
                                │
                                ▼
                    ┌───────────────────────┐
                    │ DETERMINISTIC POLICY  │
                    │       ENGINE          │
                    │                       │
                    │ Rules R1 → R10        │
                    │ Approval Routing      │
                    │ Initial Actions       │
                    └───────────┬───────────┘
                                │
                       Evidence Required?
                          /           \
                        YES           NO
                         │             │
                         ▼             │
              ┌──────────────────┐    │
              │ Evidence Loop     │    │
              │                  │    │
              │ Customer Verify  │    │
              │ Step-up Auth     │    │
              └────────┬─────────┘    │
                       │              │
                       ▼              │
              ┌──────────────────┐    │
              │ Reassessment     │◄───┘
              │ decide_after_    │
              │ evidence()       │
              └────────┬─────────┘
                       │
                       ▼
              ┌──────────────────┐
              │ LLM Synthesis    │
              │                  │
              │ Explanation      │
              │ Case Summary     │
              │ SAR Narrative    │
              └────────┬─────────┘
                       │
                       ▼
              ┌──────────────────┐
              │ Persistence       │
              │                  │
              │ Case Vertex      │
              │ Audit JSON       │
              │ SAR XML          │
              │ Audit CSV        │
              └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important architectural boundary is between &lt;strong&gt;evidence&lt;/strong&gt;, &lt;strong&gt;policy&lt;/strong&gt;, and &lt;strong&gt;language generation&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why We Chose a Graph
&lt;/h1&gt;

&lt;p&gt;Traditional relational databases are excellent at structured transactional data.&lt;/p&gt;

&lt;p&gt;Fraud investigation, however, often becomes a relationship problem.&lt;/p&gt;

&lt;p&gt;Consider this investigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
     ↓
Device
     ↓
Other Cards
     ↓
Previous Transactions
     ↓
Previous Fraud Cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The investigator is effectively asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What else is connected to this transaction?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is naturally represented as a graph.&lt;/p&gt;

&lt;p&gt;Instead of treating every transaction as an isolated row, SENTINEL models relationships between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Cards&lt;/li&gt;
&lt;li&gt;Transactions&lt;/li&gt;
&lt;li&gt;Devices&lt;/li&gt;
&lt;li&gt;Billing regions&lt;/li&gt;
&lt;li&gt;Email domains&lt;/li&gt;
&lt;li&gt;Historical cases&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  TigerGraph Data Model
&lt;/h1&gt;

&lt;p&gt;Our live TigerGraph graph contains vertices including:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
Card
Transaction
DeviceProfile
BillingRegion
EmailDomain
ClosedCase
Case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And relationships such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
   └── OWNS ──&amp;gt; Card

Card
   └── MADE ──&amp;gt; Transaction

Transaction
   └── FROM_DEVICE ──&amp;gt; DeviceProfile

Transaction
   └── BILLED_IN ──&amp;gt; BillingRegion

Transaction
   └── PURCHASER_EMAIL ──&amp;gt; EmailDomain

Transaction
   └── NEXT ──&amp;gt; Transaction

ClosedCase
   └── ON_CARD ──&amp;gt; Card

ClosedCase
   └── INVOLVES ──&amp;gt; Transaction

Case
   ├── CASE_ON_CARD ──&amp;gt; Card
   ├── CASE_INVOLVES ──&amp;gt; Transaction
   └── CASE_CONNECTED_TO ──&amp;gt; Card
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This lets an investigation move through the transaction network rather than querying isolated records.&lt;/p&gt;




&lt;h1&gt;
  
  
  Multi-Hop Fraud Investigation
&lt;/h1&gt;

&lt;p&gt;One of our important graph traversals follows this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
      │
      │ FROM_DEVICE
      ▼
DeviceProfile
      │
      │ USED_ON
      ▼
Card
      │
      │ HAS_CLOSED_CASE
      ▼
ClosedCase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In GSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE OR REPLACE QUERY find_shared_device_ring(STRING txnId)
FOR GRAPH Transaction_Fraud {

    StartTxn = {Transaction.*};

    TargetTxn =
        SELECT t
        FROM StartTxn:t
        WHERE t.TransactionID == txnId;

    // Hop 1: Transaction → Device
    Dev =
        SELECT d
        FROM TargetTxn:t
        -(FROM_DEVICE:e)-&amp;gt;
        DeviceProfile:d;

    // Hop 2: Device → Cards
    ConnectedCards =
        SELECT c
        FROM Dev:d
        -(USED_ON:e)-&amp;gt;
        Card:c;

    // Hop 3: Cards → Previous Fraud Cases
    PriorFraud =
        SELECT cc
        FROM ConnectedCards:c
        -(HAS_CLOSED_CASE:e)-&amp;gt;
        ClosedCase:cc
        WHERE cc.outcome == "fraud";

    PRINT
        ConnectedCards.size() AS syndicate_size,
        ConnectedCards,
        PriorFraud;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This traversal can expose relationships that are difficult to reason about when the investigation begins from a single transaction.&lt;/p&gt;

&lt;p&gt;In our benchmark cases &lt;code&gt;HHG-014&lt;/code&gt; and &lt;code&gt;HHG-017&lt;/code&gt;, the graph revealed device relationships connecting &lt;strong&gt;299 distinct card accounts&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  TigerGraph MCP
&lt;/h1&gt;

&lt;p&gt;We didn't want the agent to directly manipulate the graph using arbitrary queries.&lt;/p&gt;

&lt;p&gt;Instead, we exposed a controlled set of specialized investigation tools through MCP.&lt;/p&gt;

&lt;p&gt;Our MCP client provides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query_customer_cards(customer_id)

query_card_history(card_id, limit)

query_shared_devices(txn_id)

query_prior_cases(card_id)

write_case(case_data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a controlled interface between the agent and the graph.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  │
  ├── query_card_history()
  │
  ├── query_shared_devices()
  │
  ├── query_prior_cases()
  │
  └── write_case()
  │
  ▼
TigerGraph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent doesn't need to understand the entire TigerGraph schema.&lt;/p&gt;

&lt;p&gt;It only needs to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I need the cards connected to this device."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The MCP tool handles the graph-specific implementation.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Evidence Layer
&lt;/h1&gt;

&lt;p&gt;After graph retrieval, SENTINEL runs deterministic detectors against the collected evidence.&lt;/p&gt;

&lt;p&gt;We implemented eight primary detectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Recurring Merchant Detection
&lt;/h2&gt;

&lt;p&gt;We look for repeated transactions with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Similar merchant&lt;/li&gt;
&lt;li&gt;Similar amount&lt;/li&gt;
&lt;li&gt;Periodic intervals&lt;/li&gt;
&lt;li&gt;Consistent historical behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1    → $49.00
Day 30   → $49.00
Day 60   → $49.00
Day 90   → $49.00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simplistic fraud detector might repeatedly flag these transactions.&lt;/p&gt;

&lt;p&gt;Our detector can instead recognize the recurring pattern as potential legitimate subscription behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Card Testing Detection
&lt;/h2&gt;

&lt;p&gt;Card testing can produce small authorization attempts before a larger purchase.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$1.23
$2.11
$4.80
$7.42
$450.00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We look for rapid sequences of micro-authorizations followed by larger transactions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Shared Device Detection
&lt;/h2&gt;

&lt;p&gt;We investigate whether a device is associated with multiple cards.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Device D123
   ├── Card A
   ├── Card B
   ├── Card C
   ├── Card D
   └── Card E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A shared device alone does not prove fraud.&lt;/p&gt;

&lt;p&gt;It becomes one piece of evidence that is combined with other signals.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. New Device Detection
&lt;/h2&gt;

&lt;p&gt;We determine whether the device is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New to the customer&lt;/li&gt;
&lt;li&gt;First seen in the customer's history&lt;/li&gt;
&lt;li&gt;Previously associated with other suspicious activity&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Out-of-Region Detection
&lt;/h2&gt;

&lt;p&gt;We compare transaction regions against the cardholder's historical baseline.&lt;/p&gt;

&lt;p&gt;We deliberately don't treat every out-of-region transaction as fraud.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bengaluru
   ↓
Mumbai
   ↓
Delhi
   ↓
Bengaluru
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;may simply represent legitimate travel.&lt;/p&gt;

&lt;p&gt;A single unexpected transaction combined with other anomalies can be more meaningful.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Card-Not-Present Burst Detection
&lt;/h2&gt;

&lt;p&gt;We identify bursts of card-not-present transactions that significantly exceed historical transaction velocity.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Account Takeover Detection
&lt;/h2&gt;

&lt;p&gt;We look for changes in digital identity signals such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Previous OS
Previous Browser
Previous Device
        ↓
Sudden change
        ↓
Transaction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combined with additional identity inconsistencies, this can indicate possible account takeover activity.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Shared Region Detection
&lt;/h2&gt;

&lt;p&gt;We identify clusters of otherwise unrelated cards originating from the same suspicious region or infrastructure.&lt;/p&gt;




&lt;h1&gt;
  
  
  Legitimacy Checklist
&lt;/h1&gt;

&lt;p&gt;Fraud detection is not only about finding suspicious evidence.&lt;/p&gt;

&lt;p&gt;It is also about finding evidence that explains why a transaction could be legitimate.&lt;/p&gt;

&lt;p&gt;Our legitimacy checks consider patterns such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recurring subscriptions&lt;/li&gt;
&lt;li&gt;Historical merchant relationships&lt;/li&gt;
&lt;li&gt;Consistent transaction amounts&lt;/li&gt;
&lt;li&gt;Travel patterns&lt;/li&gt;
&lt;li&gt;Customer history&lt;/li&gt;
&lt;li&gt;Previously cleared disputes&lt;/li&gt;
&lt;li&gt;Stable device behavior&lt;/li&gt;
&lt;li&gt;Historical transaction velocity&lt;/li&gt;
&lt;li&gt;Known customer behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents the investigation engine from interpreting every anomaly as fraud.&lt;/p&gt;




&lt;h1&gt;
  
  
  GraphRAG: Combining Semantics With Structure
&lt;/h1&gt;

&lt;p&gt;This was one of the most interesting parts of the project.&lt;/p&gt;

&lt;p&gt;Traditional RAG primarily asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which previous cases sound similar to this case?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fraud investigation also needs to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which previous cases are connected to the same entities?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are different questions.&lt;/p&gt;

&lt;p&gt;So we combined both.&lt;/p&gt;




&lt;h1&gt;
  
  
  Our Hybrid GraphRAG Pipeline
&lt;/h1&gt;

&lt;p&gt;Historical cases are embedded using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each case becomes a &lt;strong&gt;384-dimensional vector&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We then perform semantic similarity search.&lt;/p&gt;

&lt;p&gt;At the same time, we query graph relationships.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Historical Cases
                           │
             ┌─────────────┴─────────────┐
             ▼                           ▼
      Semantic Search             Graph Search
             │                           │
             │                           │
             └─────────────┬─────────────┘
                           ▼
                    Relevance Fusion
                           │
                           ▼
                    Ranked Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cases that are graph-adjacent receive an additional priority boost.&lt;/p&gt;

&lt;p&gt;Our implementation uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;semantic_score + adjacency_boost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with an adjacency boost of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+0.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for relevant graph relationships.&lt;/p&gt;

&lt;p&gt;This means a case isn't ranked highly merely because its text sounds similar.&lt;/p&gt;

&lt;p&gt;It can also be ranked highly because it shares important graph structure.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Negative Evidence Matters
&lt;/h1&gt;

&lt;p&gt;This was one of our biggest lessons.&lt;/p&gt;

&lt;p&gt;Fraud systems naturally focus on confirmed fraud.&lt;/p&gt;

&lt;p&gt;But investigators also need to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have we seen this behavior before and determined that it was legitimate?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So we indexed historical cleared cases as well.&lt;/p&gt;

&lt;p&gt;Our historical dataset contained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5,565 closed historical cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;including approximately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;900 cleared cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These became &lt;strong&gt;negative evidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, in benchmark case &lt;code&gt;HHG-003&lt;/code&gt;, historical cleared cases such as &lt;code&gt;CC-4922&lt;/code&gt; and &lt;code&gt;CC-4718&lt;/code&gt; helped establish that recurring disputes associated with that merchant category had previously been resolved as legitimate billing behavior.&lt;/p&gt;

&lt;p&gt;This is important because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A good fraud investigation system should not only find reasons to say "fraud."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should also find evidence that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We've seen this before, and it was legitimate."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  The Most Important Design Decision
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The LLM Does Not Control Policy
&lt;/h2&gt;

&lt;p&gt;One of our earliest architectural lessons was that giving an LLM complete control over security actions creates unnecessary risk.&lt;/p&gt;

&lt;p&gt;An LLM can generate a convincing explanation.&lt;/p&gt;

&lt;p&gt;That doesn't mean it should have authority to execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLOCK_CARD
FILE_REPORT
BLOCK_ALL_CARDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we separated:&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasoning
&lt;/h3&gt;

&lt;p&gt;from:&lt;/p&gt;

&lt;h3&gt;
  
  
  Authority
&lt;/h3&gt;

&lt;p&gt;The LLM can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summarize evidence&lt;/li&gt;
&lt;li&gt;Explain detected patterns&lt;/li&gt;
&lt;li&gt;Generate case narratives&lt;/li&gt;
&lt;li&gt;Format regulatory narratives&lt;/li&gt;
&lt;li&gt;Explain why a policy rule was triggered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deterministic policy engine decides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What action is allowed&lt;/li&gt;
&lt;li&gt;Which approval level is required&lt;/li&gt;
&lt;li&gt;Whether blocking is permitted&lt;/li&gt;
&lt;li&gt;Whether a report should be filed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture therefore becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  Evidence
                     │
          ┌──────────┴──────────┐
          ▼                     ▼
   Policy Engine              LLM
          │                     │
          │                     │
      Authority             Explanation
          │                     │
          └──────────┬──────────┘
                     ▼
               Final Case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation became one of the defining design principles of SENTINEL.&lt;/p&gt;




&lt;h1&gt;
  
  
  Deterministic Policy Engine
&lt;/h1&gt;

&lt;p&gt;Our policy engine contains rules R1–R10.&lt;/p&gt;

&lt;h2&gt;
  
  
  R1 — Weak Evidence
&lt;/h2&gt;

&lt;p&gt;Weak isolated signals require additional verification rather than immediately blocking a card.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weak Signal
    ↓
VERIFY_WITH_CUSTOMER
or
STEP_UP_AUTH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R2 — Customer Denial
&lt;/h2&gt;

&lt;p&gt;If the customer denies the transaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Denial
       ↓
BLOCK_CARD
       +
CREATE_CASE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If exposure exceeds the configured threshold or the transaction is connected to a fraud ring, escalation includes the required reporting route.&lt;/p&gt;




&lt;h2&gt;
  
  
  R3 — Customer Confirmation
&lt;/h2&gt;

&lt;p&gt;If the customer confirms the transaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Confirmation
       ↓
ALLOW_TRANSACTION
       +
CLOSE_NO_FRAUD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R4 — No Response
&lt;/h2&gt;

&lt;p&gt;If the customer does not respond within the configured 24-hour window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No Response
    ↓
MONITOR_CARD
    +
DECLINE_TRANSACTION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R5 — Card Testing
&lt;/h2&gt;

&lt;p&gt;Card testing triggers additional protection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Card Testing
    ↓
DECLINE_TRANSACTION
    +
STEP_UP_AUTH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R6 — Shared Origin
&lt;/h2&gt;

&lt;p&gt;A sufficiently large shared-origin cluster triggers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE_CASE
+
FILE_REPORT
+
MONITOR_CONNECTED_CARDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with the appropriate approval route.&lt;/p&gt;




&lt;h2&gt;
  
  
  R7 — Recurring Disputes
&lt;/h2&gt;

&lt;p&gt;Recurring merchant disputes require verification.&lt;/p&gt;

&lt;p&gt;Importantly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recurring Dispute
      ↓
VERIFY_WITH_CUSTOMER
      +
WARN_CUSTOMER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blocking is prohibited by this rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  R8 — Uncertain High-Exposure Cases
&lt;/h2&gt;

&lt;p&gt;Uncertain cases above the configured exposure threshold are escalated to a human analyst.&lt;/p&gt;




&lt;h2&gt;
  
  
  R9 — Undocumented Patterns
&lt;/h2&gt;

&lt;p&gt;Unknown patterns are escalated rather than silently handled.&lt;/p&gt;




&lt;h2&gt;
  
  
  R10 — Global Blocking
&lt;/h2&gt;

&lt;p&gt;Blocking all connected cards is prohibited unless the required number of cards have independently confirmed fraud.&lt;/p&gt;




&lt;h1&gt;
  
  
  Approval Routing
&lt;/h1&gt;

&lt;p&gt;Another important part of the policy layer is approval routing.&lt;/p&gt;

&lt;p&gt;Actions can be assigned to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AUTO
L1 — Lead
L2 — Manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLOCK_CARD
    ↓
L1 approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FILE_REPORT
    ↓
L2 approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents the model from simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks dangerous. Block everything."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, the system must follow the defined authorization hierarchy.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Agent State Machine
&lt;/h1&gt;

&lt;p&gt;SENTINEL is not a single LLM prompt.&lt;/p&gt;

&lt;p&gt;It is an investigation state machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. TRIGGER
      ↓
2. INVESTIGATE
      ↓
3. GATHER_EVIDENCE
      ↓
4. ASSESS_UNCERTAINTY
      ↓
5. GATHER_MORE_EVIDENCE
      ↓
6. REASSESS
      ↓
7. RECOMMEND_ACTION
      ↓
8. UPDATE_CASE_MEMORY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each state has a specific responsibility.&lt;/p&gt;

&lt;p&gt;This makes the system easier to debug and audit than an open-ended agent loop.&lt;/p&gt;




&lt;h1&gt;
  
  
  Dynamic Next-Best Action
&lt;/h1&gt;

&lt;p&gt;A particularly important feature is that the recommended action can change after new evidence arrives.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Initial Investigation
        ↓
VERIFY_WITH_CUSTOMER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The customer then denies the transaction.&lt;/p&gt;

&lt;p&gt;The system reassesses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Denial
        ↓
BLOCK_CARD
        +
CREATE_CASE
        +
MONITOR_CONNECTED_CARDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system also records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;what_changed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates an audit trail explaining why the action changed.&lt;/p&gt;

&lt;p&gt;The goal is not simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What did the system decide?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;but:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What evidence caused the system to change its decision?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Stopping Rule
&lt;/h1&gt;

&lt;p&gt;Autonomous systems need to know when to stop.&lt;/p&gt;

&lt;p&gt;Otherwise an agent can continuously gather evidence without improving the decision.&lt;/p&gt;

&lt;p&gt;SENTINEL stops when one of the configured stopping conditions is met.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud probability ≥ 0.85
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud probability ≤ 0.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provided sufficient independent evidence exists.&lt;/p&gt;

&lt;p&gt;Other stopping conditions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer verification settles the dispute&lt;/li&gt;
&lt;li&gt;Authentication settles the transaction&lt;/li&gt;
&lt;li&gt;Additional graph traversal cannot change the permitted policy action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns investigation into a bounded process rather than an open-ended agent loop.&lt;/p&gt;




&lt;h1&gt;
  
  
  LLM Synthesis Layer
&lt;/h1&gt;

&lt;p&gt;Once the deterministic investigation is complete, the LLM is used for synthesis.&lt;/p&gt;

&lt;p&gt;We used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Groq
LLaMA 3.3 70B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executive case summaries&lt;/li&gt;
&lt;li&gt;Evidence explanations&lt;/li&gt;
&lt;li&gt;Policy-rule explanations&lt;/li&gt;
&lt;li&gt;FinCEN SAR narrative generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important architectural boundary remains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM
  ↓
Explanation

Policy Engine
  ↓
Authority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the LLM produces an explanation that doesn't match the deterministic evidence, the explanation can be regenerated without changing the underlying policy decision.&lt;/p&gt;




&lt;h1&gt;
  
  
  Interactive Analyst Cockpit
&lt;/h1&gt;

&lt;p&gt;We also built an interactive web cockpit for investigators.&lt;/p&gt;

&lt;p&gt;The dashboard includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fraud case overview&lt;/li&gt;
&lt;li&gt;Live graph visualization&lt;/li&gt;
&lt;li&gt;Multi-hop relationship exploration&lt;/li&gt;
&lt;li&gt;Evidence timeline&lt;/li&gt;
&lt;li&gt;Next-best-action display&lt;/li&gt;
&lt;li&gt;Watchlist management&lt;/li&gt;
&lt;li&gt;SAR generation&lt;/li&gt;
&lt;li&gt;Audit logs&lt;/li&gt;
&lt;li&gt;CSV exports&lt;/li&gt;
&lt;li&gt;AI Copilot&lt;/li&gt;
&lt;li&gt;Live MCP investigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cockpit is available at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Live MCP Investigation
&lt;/h1&gt;

&lt;p&gt;The MCP investigation modal allows an analyst or evaluator to select a case and execute the complete investigation against the live TigerGraph environment.&lt;/p&gt;

&lt;p&gt;The pipeline becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Case
 ↓
MCP Tools
 ↓
TigerGraph
 ↓
Evidence
 ↓
Policy Engine
 ↓
LLM Explanation
 ↓
Case Write-back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fast-path investigation completed in approximately &lt;strong&gt;1.2 seconds&lt;/strong&gt; in our benchmark environment.&lt;/p&gt;

&lt;p&gt;This is a project runtime measurement, not a production SLA.&lt;/p&gt;




&lt;h1&gt;
  
  
  Benchmark: 20 Ground-Truth Cases
&lt;/h1&gt;

&lt;p&gt;We evaluated SENTINEL against 20 benchmark cases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HHG-001 → HHG-020
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our validation suite produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 / 20 PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark included both fraudulent and legitimate cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complete Benchmark Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;Fraud Probability&lt;/th&gt;
&lt;th&gt;Primary Pattern&lt;/th&gt;
&lt;th&gt;Exposure&lt;/th&gt;
&lt;th&gt;SAR&lt;/th&gt;
&lt;th&gt;Validation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HHG-001&lt;/td&gt;
&lt;td&gt;Risk Score 0.61&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$77.07&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-002&lt;/td&gt;
&lt;td&gt;Risk Score 0.79&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP Fraud&lt;/td&gt;
&lt;td&gt;$292.36&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-003&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$49.00&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-004&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;td&gt;Card Testing&lt;/td&gt;
&lt;td&gt;$55.89&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-005&lt;/td&gt;
&lt;td&gt;Risk Score 0.54&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$100.07&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-006&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;Card Testing&lt;/td&gt;
&lt;td&gt;$1,906.07&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-007&lt;/td&gt;
&lt;td&gt;Risk Score 0.87&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;None / Subscription&lt;/td&gt;
&lt;td&gt;$111.92&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-008&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$55.68&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-009&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$30.02&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-010&lt;/td&gt;
&lt;td&gt;Risk Score 0.90&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.96&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$1,000.03&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-011&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$131.30&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-012&lt;/td&gt;
&lt;td&gt;Risk Score 0.55&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$30.91&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-013&lt;/td&gt;
&lt;td&gt;Risk Score 0.76&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$35.66&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-014&lt;/td&gt;
&lt;td&gt;Analyst Request&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$74.96&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-015&lt;/td&gt;
&lt;td&gt;Risk Score 0.77&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$599.94&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-016&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$59.67&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-017&lt;/td&gt;
&lt;td&gt;Risk Score 0.57&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;Card Testing&lt;/td&gt;
&lt;td&gt;$300.14&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-018&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$39.08&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-019&lt;/td&gt;
&lt;td&gt;Risk Score 0.90&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.91&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$99.92&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-020&lt;/td&gt;
&lt;td&gt;Risk Score 0.52&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$125.08&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Aggregate Benchmark Metrics
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Benchmark Cases&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation Pass Rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20 / 20 — 100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fraud Cases&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legitimate Cases&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regulatory Filings&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Policy Progression&lt;/td&gt;
&lt;td&gt;20 / 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Fraud Exposure Managed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$5,174.77&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Fraud Probability — Fraud Cases&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93.5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Fraud Probability — Legitimate Cases&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live Fast-Path Investigation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~1.2 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are results from our project benchmark and should not be interpreted as production fraud-detection performance.&lt;/p&gt;




&lt;h1&gt;
  
  
  Benchmark Examples
&lt;/h1&gt;

&lt;h2&gt;
  
  
  HHG-003 — Legitimate Recurring Behavior
&lt;/h2&gt;

&lt;p&gt;The system identified recurring transaction behavior and retrieved historical cleared cases with similar patterns.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verdict:
Legitimate

Fraud Probability:
0.07

Final Actions:
ALLOW_TRANSACTION
CLOSE_NO_FRAUD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This case demonstrated why negative evidence matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  HHG-017 — Card Testing
&lt;/h2&gt;

&lt;p&gt;The system detected a card-testing pattern.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verdict:
Fraud

Fraud Probability:
0.93

Primary Pattern:
card_testing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system updated its recommended actions after evidence evaluation.&lt;/p&gt;




&lt;h2&gt;
  
  
  HHG-014 — Shared Device Network
&lt;/h2&gt;

&lt;p&gt;The investigation exposed a large connected-card structure through graph traversal.&lt;/p&gt;

&lt;p&gt;The important evidence wasn't isolated to the transaction itself.&lt;/p&gt;

&lt;p&gt;It came from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
    ↓
Device
    ↓
Multiple Cards
    ↓
Historical Cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is exactly the type of relationship that motivated the graph-native architecture.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Learned
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Policy and Reasoning Should Be Separated
&lt;/h2&gt;

&lt;p&gt;Our biggest architectural lesson was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't give an LLM authority just because it can reason about the problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model is useful for language and synthesis.&lt;/p&gt;

&lt;p&gt;The policy engine is better suited for deterministic authorization.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Negative Evidence Is Extremely Valuable
&lt;/h2&gt;

&lt;p&gt;A fraud system that only remembers fraud can become biased toward finding fraud.&lt;/p&gt;

&lt;p&gt;Cleared historical cases provide an important counterweight.&lt;/p&gt;

&lt;p&gt;They answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have we seen this pattern before and cleared it?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Graph Context Improves Retrieval
&lt;/h2&gt;

&lt;p&gt;Semantic similarity answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What sounds similar?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Graph adjacency answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is connected?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Combining both gives us a richer retrieval signal.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Agentic Does Not Mean Uncontrolled
&lt;/h2&gt;

&lt;p&gt;We initially thought of an agent as something that could freely decide which actions to execute.&lt;/p&gt;

&lt;p&gt;Our final architecture was different.&lt;/p&gt;

&lt;p&gt;The agent has freedom to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Investigate
Retrieve
Compare
Request evidence
Reassess
Explain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it operates inside deterministic boundaries for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Policy
Approval
Actions
Auditability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction became one of the most important design principles of SENTINEL.&lt;/p&gt;




&lt;h1&gt;
  
  
  Engineering Challenges
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Deterministic Card Reconstruction
&lt;/h2&gt;

&lt;p&gt;The source transaction dataset required deterministic reconstruction of card relationships from partially masked identifiers.&lt;/p&gt;

&lt;p&gt;The ordering of missing and sequential card identifiers mattered for maintaining consistent mappings across the dataset.&lt;/p&gt;

&lt;p&gt;This was not a glamorous problem, but it was critical.&lt;/p&gt;

&lt;p&gt;Small preprocessing inconsistencies can propagate into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Card Mapping
      ↓
Graph Relationships
      ↓
Fraud Detection
      ↓
Benchmark Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deterministic preprocessing therefore became part of the investigation pipeline rather than a separate data-cleaning concern.&lt;/p&gt;




&lt;h1&gt;
  
  
  Asynchronous UI Orchestration
&lt;/h1&gt;

&lt;p&gt;The frontend initially relied on independent timers and asynchronous operations.&lt;/p&gt;

&lt;p&gt;That introduced race conditions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Graph Loading
       ↓
Evidence Animation
       ↓
Policy Result
       ↓
Case Write-back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;could appear out of order.&lt;/p&gt;

&lt;p&gt;We replaced this with sequential asynchronous orchestration so each stage completed before the next stage began.&lt;/p&gt;

&lt;p&gt;The result was a much more predictable investigation experience.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Would Build Next
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Graph Neural Networks
&lt;/h2&gt;

&lt;p&gt;We would investigate GCN/RGCN-based models for learning structural fraud representations directly from the transaction graph.&lt;/p&gt;

&lt;p&gt;The goal would be to complement deterministic detectors with learned graph-level features.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Real-Time Streaming
&lt;/h2&gt;

&lt;p&gt;A production-oriented version could integrate streaming ingestion such as Kafka:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction Stream
        ↓
Kafka
        ↓
TigerGraph
        ↓
Investigation Agent
        ↓
Policy Engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would allow investigations to begin immediately after authorization events.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Human Approval Webhooks
&lt;/h2&gt;

&lt;p&gt;L1 and L2 reviewers could receive actionable notifications through systems such as Slack or Microsoft Teams.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud Investigation

Exposure: $1,906
Connected Cards: 299
Required Approval: L2

[Review Case]
[Approve]
[Reject]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would connect the autonomous investigation pipeline with real human governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Regulatory Submission Integration
&lt;/h2&gt;

&lt;p&gt;The current system can generate structured regulatory output.&lt;/p&gt;

&lt;p&gt;A future implementation could integrate directly with an appropriate regulatory filing environment after the necessary security, compliance, authorization, and certification requirements are satisfied.&lt;/p&gt;




&lt;h1&gt;
  
  
  Project Structure
&lt;/h1&gt;

&lt;p&gt;A simplified view of the implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task-4/
│
├── src/
│   ├── agent/
│   │   ├── orchestrator.py
│   │   └── llm_adapter.py
│   │
│   ├── graph/
│   │   └── mcp_client.py
│   │
│   ├── detectors/
│   │   └── ...
│   │
│   ├── memory/
│   │   └── retriever.py
│   │
│   └── policy/
│       └── policy_engine.py
│
├── cases/
│   └── generated/
│
├── scripts/
│   ├── embed_cases.py
│   └── validate_answers.py
│
├── docs/
│   ├── BENCHMARK_REPORT.md
│   └── DEMO_VIDEO_SCRIPT.md
│
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Reproducibility
&lt;/h1&gt;

&lt;p&gt;The project source code and implementation are available here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/tsrinath2007/Task-4" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Task-4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The live investigation cockpit is available here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SENTINEL Cockpit:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benchmark validation can be reproduced using the project's validation tooling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python scripts/validate_answers.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Hackathon Rubric Alignment
&lt;/h1&gt;

&lt;p&gt;The architecture was designed to address the major evaluation dimensions of the hackathon.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rubric Category&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;How SENTINEL Addresses It&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Investigation Accuracy&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;8 deterministic detectors + legitimacy checklist&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;src/detectors/&lt;/code&gt;, generated cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next Best Action&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Pre-evidence and post-evidence action gating&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/policy/policy_engine.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Case Summary &amp;amp; Explainability&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;LLM synthesis, policy explanations, SAR narratives&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/agent/llm_adapter.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic Design &amp;amp; Engineering&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;8-stage state machine + MCP + graph write-back&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/agent/orchestrator.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Innovation&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;GraphRAG + adjacency boost + negative evidence&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/memory/retriever.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demo Quality&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Interactive cockpit + graph visualization + MCP modal&lt;/td&gt;
&lt;td&gt;Live cockpit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The benchmark validation suite produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 / 20 PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Key Takeaways
&lt;/h1&gt;

&lt;p&gt;Building SENTINEL taught us that autonomous fraud investigation isn't simply about adding an LLM to a fraud detector.&lt;/p&gt;

&lt;p&gt;The more interesting engineering problem is combining several different forms of intelligence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    SENTINEL
                       │
        ┌──────────────┼──────────────┐
        │              │              │
        ▼              ▼              ▼
     GRAPH          RULES          MEMORY
   TigerGraph     Policy Engine    GraphRAG
        │              │              │
        └──────────────┼──────────────┘
                       │
                       ▼
                    AGENT
                       │
                       ▼
                  LLM SYNTHESIS
                       │
                       ▼
                HUMAN-READABLE
                  EXPLANATION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The graph provides &lt;strong&gt;relationships&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The detectors provide &lt;strong&gt;evidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GraphRAG provides &lt;strong&gt;historical context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The policy engine provides &lt;strong&gt;authority&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent provides &lt;strong&gt;orchestration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The LLM provides &lt;strong&gt;explanation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That separation is what makes SENTINEL more than a chatbot sitting on top of a database.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Fraud rarely exists as a single suspicious transaction.&lt;/p&gt;

&lt;p&gt;It exists as a network.&lt;/p&gt;

&lt;p&gt;A device connects cards.&lt;/p&gt;

&lt;p&gt;Cards connect transactions.&lt;/p&gt;

&lt;p&gt;Transactions connect customers, regions, merchants, and historical cases.&lt;/p&gt;

&lt;p&gt;That is why we built SENTINEL around a graph.&lt;/p&gt;

&lt;p&gt;Our goal was not to create an LLM that simply says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks like fraud."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We wanted to build an investigation system that can answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What happened?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is connected to it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What evidence supports the conclusion?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What historical cases are relevant?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What policy permits us to do next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And why did the recommended action change?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The resulting architecture combines TigerGraph, MCP, GraphRAG, deterministic policy enforcement, agentic orchestration, and LLM synthesis into a single investigation workflow.&lt;/p&gt;

&lt;p&gt;And most importantly, we learned that in high-impact systems:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agentic doesn't have to mean uncontrolled.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The most useful autonomous systems may be the ones where the model has enough freedom to investigate—but enough constraints to remain auditable and predictable.&lt;/p&gt;




&lt;h1&gt;
  
  
  Built by Team GOA-T
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Thota Sai Eswar Srinath
&lt;/h3&gt;

&lt;p&gt;Team Leader &amp;amp; Agentic Architecture&lt;/p&gt;

&lt;h3&gt;
  
  
  Nikhil Kadiri
&lt;/h3&gt;

&lt;p&gt;Graph Systems &amp;amp; TigerGraph Traversal Engineering&lt;/p&gt;

&lt;h3&gt;
  
  
  Bondugula Pranav Teja
&lt;/h3&gt;

&lt;p&gt;Policy Engine &amp;amp; GraphRAG Implementation&lt;/p&gt;




&lt;h1&gt;
  
  
  Project Links
&lt;/h1&gt;

&lt;p&gt;🚀 &lt;strong&gt;Live Cockpit:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/tsrinath2007/Task-4" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Task-4&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SENTINEL — Investigate the transaction. Understand the network. Enforce the policy.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>devchallenge</category>
      <category>rag</category>
    </item>
  </channel>
</rss>
