<?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: sk. saddam</title>
    <description>The latest articles on DEV Community by sk. saddam (@sk_saddam_5cfd61d6612b97).</description>
    <link>https://dev.to/sk_saddam_5cfd61d6612b97</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%2F4191027%2F8aecb7ff-a0be-4902-a181-774d87ac2163.jpg</url>
      <title>DEV Community: sk. saddam</title>
      <link>https://dev.to/sk_saddam_5cfd61d6612b97</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sk_saddam_5cfd61d6612b97"/>
    <language>en</language>
    <item>
      <title>Your fraud analyst sees rows. Fraud is a shape.</title>
      <dc:creator>sk. saddam</dc:creator>
      <pubDate>Sat, 17 Oct 2026 18:58:02 +0000</pubDate>
      <link>https://dev.to/sk_saddam_5cfd61d6612b97/your-fraud-analyst-sees-rows-fraud-is-a-shape-51o8</link>
      <guid>https://dev.to/sk_saddam_5cfd61d6612b97/your-fraud-analyst-sees-rows-fraud-is-a-shape-51o8</guid>
      <description>&lt;h1&gt;
  
  
  Your fraud analyst sees rows. Fraud is a shape.
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;How we built CaseFile, a graph-walking investigation agent, in one hackathon day — and what it taught us about context for AI agents.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;An alert lands on your fraud team's queue: &lt;strong&gt;$8,150.50, account FR-04 → FR-02, both customers are new.&lt;/strong&gt; Your analyst opens FR-04's file. Name, country, account age, recent activity. Ordinary.&lt;/p&gt;

&lt;p&gt;Then they open FR-02's file. Also ordinary.&lt;/p&gt;

&lt;p&gt;The products told them all of this in two separate windows — and &lt;strong&gt;both windows lied by omission&lt;/strong&gt;, because the fraud isn't in either record. It lives &lt;em&gt;between&lt;/em&gt; them:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Five other "customers" — all weeks old — log into their accounts from &lt;strong&gt;the same two phones&lt;/strong&gt; as FR-04. There is no customer named on those accounts that you ever met at a branch. One innocent woman shares a device with them accidentally, and she has ten months of boring grocery payments. And the money, once it lands, walks &lt;strong&gt;FR-04 → FR-02 → FR-05 → FR-03&lt;/strong&gt; and gets paid out to the same electronics merchant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a &lt;em&gt;shape&lt;/em&gt;. Rows don't have shapes — &lt;strong&gt;graphs do.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The agent that walks it
&lt;/h2&gt;

&lt;p&gt;CaseFile is our hackathon agent (Graph Hacks by WeMakeDevs × FalkorDB). Its LLM has no memory of any customer in its context window. What it has instead is &lt;strong&gt;nine tools, each one a Cypher traversal&lt;/strong&gt; over FalkorDB:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it hands the agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;get_alert&lt;/code&gt; / &lt;code&gt;get_open_alerts&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;the paperwork: who, what, why flagged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;account_profile&lt;/code&gt; / &lt;code&gt;account_connections&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;one hop around a suspect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;shared_endpoints&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;other accounts behind the same device / IP / card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;trace_money_path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;follow transfers N hops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;shortest_path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cheapest evidence trail between two accounts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ring_extent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;how big is the cluster around this account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;close_alert&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the agent's &lt;em&gt;write action&lt;/em&gt; — verdict into the graph&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We deliberately gave the model &lt;strong&gt;no customer data in the prompt&lt;/strong&gt;. It investigates by &lt;em&gt;choosing queries&lt;/em&gt; and reading back results, so every fact in its final verdict is reproducible: &lt;strong&gt;show the tool call, show the Cypher, you have shown the reasoning.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The point where the demo gets applause is the decoy. The graph that incriminates six accounts also tabs one &lt;em&gt;completely innocent&lt;/em&gt; woman as a device sharer. A keyword/ML-risk-score system would flag her and move on, generating a false positive (and, honestly, an unfair suspension). The agent instead runs her profile next to the other five, sees ten months of normal behavior vs. five new flag-plagued accounts, and explicitly says: &lt;em&gt;"ruled out — ordinary history, plausible shared family device."&lt;/em&gt; That's reasoning over &lt;strong&gt;relationships and their evidence&lt;/strong&gt;, not pattern-matching on a connection existing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the graph is the context layer, not a sidecar
&lt;/h2&gt;

&lt;p&gt;Every serious agent question here is about connections: &lt;em&gt;which accounts are linked to this transaction, what did the money do next, who else was holding this device.&lt;/em&gt; Our agent loops entirely on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;a:&lt;/span&gt;&lt;span class="n"&gt;Account&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;id:&lt;/span&gt;&lt;span class="n"&gt;$id&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:USES_DEVICE&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;d:&lt;/span&gt;&lt;span class="n"&gt;Device&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:USES_DEVICE&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;b:&lt;/span&gt;&lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;d.id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="k"&gt;DISTINCT&lt;/span&gt; &lt;span class="n"&gt;b.id&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three hops of that — and the ring is simply &lt;em&gt;visible&lt;/em&gt;. And because FalkorDB keeps the answer to &lt;code&gt;close_alert&lt;/code&gt; &lt;em&gt;in the graph along with the fact pattern&lt;/em&gt;, the next session starts from an evidence-labeled graph, not a blank slate. The database is the agent's memory &lt;strong&gt;and&lt;/strong&gt; its working context.&lt;/p&gt;

&lt;p&gt;The verdict shouldn't be a paragraph of LLM prose you have to take on faith. Ours is a trail: 7 tool calls, each one reproducible, ~10 ms of graph time total. &lt;em&gt;Agents are only as good as the context they work with&lt;/em&gt; — ours works inside the shape of the problem.&lt;/p&gt;




&lt;p&gt;Built with FalkorDB + Python in one day for Graph Hacks. Full code: github.com/sksaddam007/casefile. To reproduce: &lt;code&gt;CASEFILE_MOCK=1 ./demo.sh&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>graphdb</category>
      <category>falkordb</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
