<?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: Aryan Gupta</title>
    <description>The latest articles on DEV Community by Aryan Gupta (@aryan_gupta_cbd009a5487dd).</description>
    <link>https://dev.to/aryan_gupta_cbd009a5487dd</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%2F4141380%2F883472ee-fd55-4280-b56c-35c11348c9d4.jpg</url>
      <title>DEV Community: Aryan Gupta</title>
      <link>https://dev.to/aryan_gupta_cbd009a5487dd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aryan_gupta_cbd009a5487dd"/>
    <language>en</language>
    <item>
      <title>Building SentinelGraph: An Agentic AI System for Fraud Investigation with TigerGraph</title>
      <dc:creator>Aryan Gupta</dc:creator>
      <pubDate>Thu, 24 Sep 2026 13:51:50 +0000</pubDate>
      <link>https://dev.to/aryan_gupta_cbd009a5487dd/building-sentinelgraph-an-agentic-ai-system-for-fraud-investigation-with-tigergraph-ma5</link>
      <guid>https://dev.to/aryan_gupta_cbd009a5487dd/building-sentinelgraph-an-agentic-ai-system-for-fraud-investigation-with-tigergraph-ma5</guid>
      <description>&lt;h1&gt;
  
  
  Building SentinelGraph: An Agentic AI System for Fraud Investigation with TigerGraph
&lt;/h1&gt;

&lt;p&gt;Fraud detection is often treated as a classification problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Does this transaction look fraudulent?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But real fraud investigation is more complicated.&lt;/p&gt;

&lt;p&gt;An analyst doesn't just need a fraud score. They need to understand &lt;strong&gt;why&lt;/strong&gt; a transaction is suspicious, what entities are connected to it, whether similar incidents happened before, what evidence is still missing, and what action should be taken next.&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;HHGOA 2026 Task 4&lt;/strong&gt;, I built &lt;strong&gt;SentinelGraph&lt;/strong&gt;, an agentic fraud-investigation system that uses &lt;strong&gt;TigerGraph, graph-based retrieval, LLM reasoning, case memory, and deterministic policy controls&lt;/strong&gt; to investigate suspicious transactions and recommend the next-best action.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/aryangupta060407-web/sentinelgraph" rel="noopener noreferrer"&gt;https://github.com/aryangupta060407-web/sentinelgraph&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal wasn't simply to build another fraud classifier.&lt;/p&gt;

&lt;p&gt;The goal was to build an &lt;strong&gt;AI investigation agent&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;SentinelGraph is an AI-powered fraud investigation system designed around this workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud Signal
     ↓
Investigation Trigger
     ↓
Retrieve Initial Evidence
     ↓
Fraud Pattern Detection
     ↓
Historical Case Memory
     ↓
Agent Reasoning
     ↓
Select Additional Evidence
     ↓
Reassess
     ↓
Next-Best Action
     ↓
Policy / Human Approval
     ↓
Case Write-Back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system can be triggered by a fraud signal, customer report, or analyst.&lt;/p&gt;

&lt;p&gt;Instead of retrieving every possible piece of information immediately, the agent starts with a &lt;strong&gt;minimal evidence set&lt;/strong&gt;, reasons about what it knows, and decides whether additional evidence is necessary.&lt;/p&gt;

&lt;p&gt;This was one of the main design principles of SentinelGraph:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The agent should investigate, not just execute a predefined list of queries.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Why Use a Graph for Fraud Investigation?
&lt;/h1&gt;

&lt;p&gt;Fraud rarely exists in isolation.&lt;/p&gt;

&lt;p&gt;A transaction can be connected to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A customer&lt;/li&gt;
&lt;li&gt;A card&lt;/li&gt;
&lt;li&gt;An account&lt;/li&gt;
&lt;li&gt;A device&lt;/li&gt;
&lt;li&gt;An IP address&lt;/li&gt;
&lt;li&gt;A merchant&lt;/li&gt;
&lt;li&gt;An email domain&lt;/li&gt;
&lt;li&gt;A billing region&lt;/li&gt;
&lt;li&gt;Other transactions&lt;/li&gt;
&lt;li&gt;Previous fraud investigations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Representing this as a graph makes these relationships much easier to investigate.&lt;/p&gt;

&lt;p&gt;A simplified example looks 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
   │
   ├── owns ──→ Card
   │             │
   │             └── made ──→ Transaction
   │                              │
   │                              ├── from ──→ Device
   │                              ├── from ──→ IP
   │                              ├── sold by ──→ Merchant
   │                              └── billed in ──→ Region
   │
   └── has ──→ Account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine that the same device is associated with several transactions across different cards.&lt;/p&gt;

&lt;p&gt;Or a card is connected to previous fraud cases.&lt;/p&gt;

&lt;p&gt;Or a suspicious transaction comes from a new device and an unusual region.&lt;/p&gt;

&lt;p&gt;These relationships are extremely useful investigation signals.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;TigerGraph&lt;/strong&gt; becomes an important part of the architecture.&lt;/p&gt;




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

&lt;p&gt;The SentinelGraph architecture consists of several major components:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[Fraud Trigger] --&amp;gt; B[Investigation Agent]

    B --&amp;gt; C[TigerGraph / MCP]
    C --&amp;gt; D[Graph Evidence]

    B --&amp;gt; E[Case Memory]
    E --&amp;gt; F[Historical Investigations]

    D --&amp;gt; G[Evidence Ledger]
    F --&amp;gt; G

    G --&amp;gt; H[LLM Reasoning]

    H --&amp;gt; I{Need More Evidence?}

    I --&amp;gt;|Yes| J[Agent Selects Tool]
    J --&amp;gt; C

    I --&amp;gt;|No| K[Next-Best Action]

    K --&amp;gt; L[Deterministic Policy Gate]

    L --&amp;gt;|Approval Required| M[Human Approval]
    L --&amp;gt;|Automatic| N[Action]

    M --&amp;gt; N

    N --&amp;gt; O[Investigation Case Write-Back]
    O --&amp;gt; C&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The important part is that the LLM isn't directly responsible for enforcing the final security policy.&lt;/p&gt;

&lt;p&gt;The architecture separates:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reasoning&lt;/strong&gt; from &lt;strong&gt;authorization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent can recommend an action, but protected actions still pass through a deterministic policy layer.&lt;/p&gt;




&lt;h1&gt;
  
  
  How TigerGraph Is Used
&lt;/h1&gt;

&lt;p&gt;TigerGraph acts as the relationship and investigation layer of SentinelGraph.&lt;/p&gt;

&lt;p&gt;The graph contains entities such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Customer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Card&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Account&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Transaction&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DeviceProfile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IPAddress&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Merchant&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EmailDomain&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BillingRegion&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ClosedCase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;InvestigationCase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Evidence&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PolicyRule&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CaseEvent&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The graph also contains relationships connecting these entities.&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;Customer → Card → Transaction
Transaction → Device
Transaction → IP
Transaction → Merchant
Transaction → Email
Transaction → Billing Region
InvestigationCase → Evidence
InvestigationCase → CaseEvent
InvestigationCase → PolicyRule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SentinelGraph exposes investigation operations 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;transaction_context
customer_history
connected_entities
device_investigation
similar_cases
fraud_pattern_detection
write_case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These operations are available through the TigerGraph integration layer using &lt;strong&gt;MCP or RESTPP&lt;/strong&gt;, depending on the configured environment.&lt;/p&gt;




&lt;h1&gt;
  
  
  Fraud Pattern Detection
&lt;/h1&gt;

&lt;p&gt;The system also represents known fraud patterns explicitly in the graph.&lt;/p&gt;

&lt;p&gt;The implemented patterns include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;card_testing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;card_not_present_fraud&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;card_not_present_new_device&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;out_of_region_use&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;account_takeover&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also support for an analyst-defined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;undocumented&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fraud patterns are represented as graph entities and connected to relevant transactions.&lt;/p&gt;

&lt;p&gt;This makes pattern retrieval part of the investigation rather than simply relying on a single numerical risk score.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Agentic Investigation Loop
&lt;/h1&gt;

&lt;p&gt;This is probably the most important part of the project.&lt;/p&gt;

&lt;p&gt;A traditional pipeline might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
→ Query A
→ Query B
→ Query C
→ Query D
→ Generate answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That isn't really an agent.&lt;/p&gt;

&lt;p&gt;SentinelGraph instead follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trigger
↓
Minimal evidence
↓
Reason
↓
Choose next tool
↓
Retrieve evidence
↓
Reassess
↓
Choose whether to continue
↓
Recommend action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, the initial evidence might indicate that a transaction is associated with a suspicious device.&lt;/p&gt;

&lt;p&gt;The agent can then decide:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Device investigation is more relevant than retrieving additional customer history.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It calls the device investigation tool.&lt;/p&gt;

&lt;p&gt;The new evidence is added to the evidence ledger.&lt;/p&gt;

&lt;p&gt;The agent reassesses.&lt;/p&gt;

&lt;p&gt;If the evidence is now sufficient, it stops.&lt;/p&gt;

&lt;p&gt;If not, it can select another investigation tool.&lt;/p&gt;

&lt;p&gt;This creates a bounded investigation loop rather than a fixed chain of API calls.&lt;/p&gt;




&lt;h1&gt;
  
  
  Evidence Selection
&lt;/h1&gt;

&lt;p&gt;One of the things I wanted to avoid was giving the agent access to every tool and having it blindly call everything.&lt;/p&gt;

&lt;p&gt;Instead, each investigation step records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selected tool&lt;/li&gt;
&lt;li&gt;Tool-selection rationale&lt;/li&gt;
&lt;li&gt;Evidence returned&lt;/li&gt;
&lt;li&gt;Reassessment&lt;/li&gt;
&lt;li&gt;Whether additional evidence is required&lt;/li&gt;
&lt;li&gt;Stop reason&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the investigation traceable.&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;Selected Tool:
device_investigation

Reason:
The initial transaction context indicates a new device.
Investigating other transactions associated with the device
may establish whether the device is shared across accounts.

Result:
Additional related transactions discovered.

Reassessment:
Evidence is now sufficient to determine the likely fraud pattern.

Stop Reason:
Sufficient evidence collected.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That trace is much more useful to an analyst than simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The transaction is fraudulent.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Case Memory
&lt;/h1&gt;

&lt;p&gt;Fraud investigations don't happen in a vacuum.&lt;/p&gt;

&lt;p&gt;Previous cases can contain valuable information.&lt;/p&gt;

&lt;p&gt;SentinelGraph retrieves historical case information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Previous case IDs&lt;/li&gt;
&lt;li&gt;Fraud pattern&lt;/li&gt;
&lt;li&gt;Outcome&lt;/li&gt;
&lt;li&gt;Action taken&lt;/li&gt;
&lt;li&gt;Evidence&lt;/li&gt;
&lt;li&gt;Relevant entities&lt;/li&gt;
&lt;li&gt;Historical summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can use this information when investigating a new case.&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;Current Transaction
        │
        ├── Current Evidence
        │
        └── Historical Cases
                │
                ├── Similar Pattern
                ├── Similar Entity
                └── Previous Outcome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But there is an important constraint:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Historical memory cannot override current evidence or deterministic policy.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A previous case can influence reasoning, but it doesn't get to decide the current case.&lt;/p&gt;

&lt;p&gt;The system also records whether historical memory influenced the final recommendation and why.&lt;/p&gt;




&lt;h1&gt;
  
  
  Graph-Grounded Reasoning
&lt;/h1&gt;

&lt;p&gt;I initially considered describing the system simply as GraphRAG.&lt;/p&gt;

&lt;p&gt;However, I wanted the terminology to accurately reflect the implementation.&lt;/p&gt;

&lt;p&gt;The current pipeline is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TigerGraph / MCP Retrieval
        ↓
Structured Evidence Ledger
        ↓
Relevant Context Selection
        ↓
LLM Reasoning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is no vector database in the current implementation.&lt;/p&gt;

&lt;p&gt;So the more accurate description is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Graph-grounded retrieval / GraphRAG-style reasoning&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The graph provides structured evidence and relationships, while the LLM reasons over a bounded context derived from that evidence.&lt;/p&gt;




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

&lt;p&gt;Fraud investigation isn't complete when we determine that something looks suspicious.&lt;/p&gt;

&lt;p&gt;The system also needs to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What should happen next?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SentinelGraph can recommend actions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow transaction&lt;/li&gt;
&lt;li&gt;Challenge / step-up authentication&lt;/li&gt;
&lt;li&gt;Verify customer&lt;/li&gt;
&lt;li&gt;Monitor account&lt;/li&gt;
&lt;li&gt;Create investigation case&lt;/li&gt;
&lt;li&gt;Block transaction&lt;/li&gt;
&lt;li&gt;Block card&lt;/li&gt;
&lt;li&gt;Block account&lt;/li&gt;
&lt;li&gt;File a report&lt;/li&gt;
&lt;li&gt;Escalate for review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The recommendation is then passed through a deterministic policy gate.&lt;/p&gt;




&lt;h1&gt;
  
  
  Human-in-the-Loop Controls
&lt;/h1&gt;

&lt;p&gt;Some actions are too sensitive to execute automatically.&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;BLOCK_TRANSACTION
BLOCK_CARD
BLOCK_ACCOUNT
FILE_REPORT
CLOSE_CASE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These protected actions can require approval depending on the fraud probability and policy configuration.&lt;/p&gt;

&lt;p&gt;The system therefore separates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent Recommendation
        ↓
Policy Gate
        ↓
Approval Route
        ↓
Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is important because an LLM should not be treated as the final authorization layer for sensitive financial actions.&lt;/p&gt;

&lt;p&gt;The LLM can reason.&lt;/p&gt;

&lt;p&gt;The policy engine controls what is actually allowed.&lt;/p&gt;




&lt;h1&gt;
  
  
  Evidence Providers
&lt;/h1&gt;

&lt;p&gt;Another part of the architecture is the evidence-provider abstraction.&lt;/p&gt;

&lt;p&gt;There are two modes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo Evidence Provider
&lt;/h3&gt;

&lt;p&gt;The demo environment uses deterministic simulated evidence.&lt;/p&gt;

&lt;p&gt;It is explicitly marked as:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This prevents the system from accidentally presenting simulated results as real-world verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Evidence Provider
&lt;/h3&gt;

&lt;p&gt;In a live deployment, evidence can be retrieved from an approved external provider configured through:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If the live provider is unavailable, the system reports that evidence is unavailable rather than fabricating a result.&lt;/p&gt;

&lt;p&gt;That distinction was important to me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If the system doesn't have evidence, it should say it doesn't have evidence.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Case Write-Back
&lt;/h1&gt;

&lt;p&gt;The investigation shouldn't disappear after the agent generates a response.&lt;/p&gt;

&lt;p&gt;SentinelGraph writes the investigation back into the graph in live mode.&lt;/p&gt;

&lt;p&gt;The write-back can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Investigation case&lt;/li&gt;
&lt;li&gt;Flagged transaction&lt;/li&gt;
&lt;li&gt;Card relationship&lt;/li&gt;
&lt;li&gt;Evidence&lt;/li&gt;
&lt;li&gt;Case event&lt;/li&gt;
&lt;li&gt;Policy rule&lt;/li&gt;
&lt;li&gt;Findings&lt;/li&gt;
&lt;li&gt;Selected action&lt;/li&gt;
&lt;li&gt;Approval route&lt;/li&gt;
&lt;li&gt;Action status&lt;/li&gt;
&lt;li&gt;Stop reason&lt;/li&gt;
&lt;li&gt;Fraud probability&lt;/li&gt;
&lt;li&gt;Historical-memory summary&lt;/li&gt;
&lt;/ul&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;InvestigationCase
       │
       ├── involves → Transaction
       ├── connected → Card
       ├── has → Evidence
       ├── has → CaseEvent
       └── applies → PolicyRule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means the investigation itself becomes part of the graph and can contribute to future investigations.&lt;/p&gt;

&lt;p&gt;Demo mode intentionally does &lt;strong&gt;not&lt;/strong&gt; pretend to perform live graph write-back.&lt;/p&gt;




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

&lt;p&gt;I evaluated SentinelGraph against the provided set of &lt;strong&gt;20 HHGOA benchmark cases&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The benchmark was executed in explicit &lt;code&gt;demo_adapter&lt;/code&gt; mode.&lt;/p&gt;

&lt;p&gt;The results were:&lt;/p&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;Verdict match rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pattern match rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final action match rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approval-route match rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent tool-selection rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Early-stop rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;25%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical-memory influence rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grounded explanation rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Investigation failures&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These results should be interpreted carefully.&lt;/p&gt;

&lt;p&gt;They are &lt;strong&gt;reference comparisons from the deterministic demo environment&lt;/strong&gt;, not proof of production fraud-detection accuracy or live TigerGraph/LLM performance.&lt;/p&gt;

&lt;p&gt;Live TigerGraph/MCP execution and live evidence-provider verification require configured infrastructure and credentials.&lt;/p&gt;

&lt;p&gt;I chose to make that limitation explicit rather than hide it.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Makes It Agentic?
&lt;/h1&gt;

&lt;p&gt;There are a lot of systems today that call themselves “AI agents” because an LLM is somewhere in the architecture.&lt;/p&gt;

&lt;p&gt;For SentinelGraph, I wanted the agentic behavior to be visible in the workflow.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Understand the current evidence.&lt;/li&gt;
&lt;li&gt;Identify what is relevant.&lt;/li&gt;
&lt;li&gt;Decide whether more evidence is necessary.&lt;/li&gt;
&lt;li&gt;Select an investigation tool.&lt;/li&gt;
&lt;li&gt;Interpret the new evidence.&lt;/li&gt;
&lt;li&gt;Reassess its hypothesis.&lt;/li&gt;
&lt;li&gt;Decide when enough evidence exists.&lt;/li&gt;
&lt;li&gt;Recommend the next action.&lt;/li&gt;
&lt;li&gt;Explain the reasoning.&lt;/li&gt;
&lt;li&gt;Pass the recommendation through deterministic policy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The important part is the &lt;strong&gt;decision loop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent isn't simply generating text.&lt;/p&gt;

&lt;p&gt;It is deciding what information it needs next.&lt;/p&gt;




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

&lt;h2&gt;
  
  
  1. Graph relationships can be more valuable than isolated features
&lt;/h2&gt;

&lt;p&gt;A transaction's individual attributes are useful, but relationships can reveal much more.&lt;/p&gt;

&lt;p&gt;A shared device, repeated IP address, connected card, unusual merchant relationship, or previous case can change how an investigation should proceed.&lt;/p&gt;

&lt;p&gt;That's exactly where graph databases become interesting for fraud investigation.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Agentic doesn't mean unlimited autonomy
&lt;/h2&gt;

&lt;p&gt;Giving an LLM 20 tools and saying “investigate this” isn't necessarily a good agent architecture.&lt;/p&gt;

&lt;p&gt;The investigation needs boundaries.&lt;/p&gt;

&lt;p&gt;SentinelGraph therefore uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bounded investigation rounds&lt;/li&gt;
&lt;li&gt;Explicit tool selection&lt;/li&gt;
&lt;li&gt;Structured evidence&lt;/li&gt;
&lt;li&gt;Deterministic policy&lt;/li&gt;
&lt;li&gt;Approval routes&lt;/li&gt;
&lt;li&gt;Protected actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent has autonomy over &lt;strong&gt;investigation strategy&lt;/strong&gt;, but not unrestricted authority over sensitive actions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Memory needs guardrails
&lt;/h2&gt;

&lt;p&gt;Historical cases are useful.&lt;/p&gt;

&lt;p&gt;But blindly copying decisions from previous investigations can be dangerous.&lt;/p&gt;

&lt;p&gt;The current transaction must remain the primary source of truth.&lt;/p&gt;

&lt;p&gt;So the design became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current Evidence
      +
Historical Memory
      ↓
Agent Reasoning
      ↓
Deterministic Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Historical Case
      ↓
Copy Previous Decision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Explainability needs to be part of the architecture
&lt;/h2&gt;

&lt;p&gt;Adding an explanation at the very end isn't enough.&lt;/p&gt;

&lt;p&gt;The investigation itself should produce a trace.&lt;/p&gt;

&lt;p&gt;That's why SentinelGraph records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evidence retrieved&lt;/li&gt;
&lt;li&gt;Tools selected&lt;/li&gt;
&lt;li&gt;Tool-selection rationale&lt;/li&gt;
&lt;li&gt;Reassessment&lt;/li&gt;
&lt;li&gt;Memory influence&lt;/li&gt;
&lt;li&gt;Final reasoning&lt;/li&gt;
&lt;li&gt;Stop reason&lt;/li&gt;
&lt;li&gt;Policy route&lt;/li&gt;
&lt;li&gt;Recommended action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the system much easier to inspect and debug.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Don't fake integrations
&lt;/h2&gt;

&lt;p&gt;This was probably one of the most important lessons from the project.&lt;/p&gt;

&lt;p&gt;It's tempting to make a demo look completely live.&lt;/p&gt;

&lt;p&gt;But if an external verification service isn't actually connected, the system shouldn't pretend that it is.&lt;/p&gt;

&lt;p&gt;That's why SentinelGraph explicitly separates:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;The same principle applies to TigerGraph and LLM execution.&lt;/p&gt;

&lt;p&gt;Being explicit about what was actually tested makes the engineering result more credible.&lt;/p&gt;




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

&lt;p&gt;Building this system wasn't just about connecting an LLM to a graph database.&lt;/p&gt;

&lt;p&gt;Some of the harder parts were:&lt;/p&gt;

&lt;h3&gt;
  
  
  Graph traversal design
&lt;/h3&gt;

&lt;p&gt;Fraud investigation requires the right relationships and traversal paths.&lt;/p&gt;

&lt;p&gt;A graph query that technically executes but doesn't represent the intended relationship can produce misleading evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent control
&lt;/h3&gt;

&lt;p&gt;The agent needed enough freedom to choose evidence while still being bounded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Policy enforcement
&lt;/h3&gt;

&lt;p&gt;Sensitive actions needed deterministic controls instead of relying entirely on LLM reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Case memory
&lt;/h3&gt;

&lt;p&gt;Historical investigations had to be useful without becoming an unquestioned source of truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo vs live behavior
&lt;/h3&gt;

&lt;p&gt;The system needed a clear separation between reproducible demo behavior and live integrations.&lt;/p&gt;




&lt;h1&gt;
  
  
  Technology Stack
&lt;/h1&gt;

&lt;p&gt;The main technologies used in SentinelGraph include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TigerGraph&lt;/strong&gt; — graph database and investigation graph&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TigerGraph MCP / RESTPP&lt;/strong&gt; — graph tool integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; — backend/investigation engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React / Vite&lt;/strong&gt; — frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM reasoning&lt;/strong&gt; — bounded agent reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GSQL&lt;/strong&gt; — graph schema and investigation queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; — backend runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture intentionally keeps the core investigation workflow independent of a single LLM provider.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Architecture
&lt;/h1&gt;

&lt;p&gt;Putting everything together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         ┌──────────────────┐
                         │   Fraud Trigger  │
                         └────────┬─────────┘
                                  ↓
                       ┌─────────────────────┐
                       │ Investigation Agent │
                       └─────────┬───────────┘
                                 ↓
              ┌──────────────────┴──────────────────┐
              ↓                                     ↓
      ┌───────────────┐                    ┌────────────────┐
      │  TigerGraph   │                    │  Case Memory   │
      │   / MCP       │                    │                │
      └───────┬───────┘                    └───────┬────────┘
              │                                    │
              └──────────────┬─────────────────────┘
                             ↓
                    ┌──────────────────┐
                    │ Evidence Ledger  │
                    └────────┬─────────┘
                             ↓
                    ┌──────────────────┐
                    │  LLM Reasoning   │
                    └────────┬─────────┘
                             ↓
                    Need More Evidence?
                       ↙            ↘
                     Yes             No
                      ↓               ↓
               Select Tool      Next-Best Action
                      │               ↓
                      └──────→ Policy Gate
                                  ↓
                         ┌────────┴────────┐
                         ↓                 ↓
                   Human Approval       Automatic
                         │                 │
                         └────────┬────────┘
                                  ↓
                         Case Write-Back
                                  ↓
                             TigerGraph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;SentinelGraph started with a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if fraud investigation could be handled as an adaptive investigation process rather than a single prediction?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That led to a system where an agent can retrieve graph evidence, investigate relationships, use historical case memory, decide what evidence it needs next, reassess its conclusions, recommend a next-best action, and record the investigation back into the graph.&lt;/p&gt;

&lt;p&gt;The biggest takeaway for me was that building an agentic system isn't just about adding an LLM.&lt;/p&gt;

&lt;p&gt;The difficult part is designing the &lt;strong&gt;boundaries around the LLM&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What evidence can it access?&lt;/li&gt;
&lt;li&gt;What tools can it select?&lt;/li&gt;
&lt;li&gt;When should it stop?&lt;/li&gt;
&lt;li&gt;How should historical memory influence it?&lt;/li&gt;
&lt;li&gt;Which actions require approval?&lt;/li&gt;
&lt;li&gt;What happens when evidence is unavailable?&lt;/li&gt;
&lt;li&gt;How do we make every decision traceable?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That combination of &lt;strong&gt;graph intelligence + bounded agent reasoning + deterministic controls&lt;/strong&gt; is what makes SentinelGraph interesting to me.&lt;/p&gt;

&lt;p&gt;The project was built for &lt;strong&gt;HHGOA 2026 Task 4&lt;/strong&gt;, with the goal of exploring how TigerGraph and agentic AI can work together for fraud investigation and next-best-action workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check out the project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Harmish-Javiya/TigerGraph-Agentic-Fraud-Investigation" rel="noopener noreferrer"&gt;https://github.com/Harmish-Javiya/TigerGraph-Agentic-Fraud-Investigation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're building with graph databases, AI agents, or fraud-detection systems, I'd love to hear what approaches you're using.&lt;/p&gt;

</description>
      <category>tigergraphdb</category>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
