<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Projects on Clint Rori</title><link>https://rorimwema.github.io/projects/</link><description>Recent content in Projects on Clint Rori</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 02 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://rorimwema.github.io/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>Fenra</title><link>https://rorimwema.github.io/projects/fenra/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://rorimwema.github.io/projects/fenra/</guid><description>&lt;p&gt;Fenra is a multi-agent system for detecting corruption patterns in public procurement data. It uses a swarm of specialized AI agents coordinated by a verification layer called &amp;ldquo;the Judge.&amp;rdquo;&lt;/p&gt;
&lt;h3 id="the-problem"&gt;The Problem&lt;/h3&gt;
&lt;p&gt;Corruption in procurement leaves traces across multiple systems—financial records, company registries, contract documents. The patterns are obvious in hindsight but buried under noise in real-time. Single AI models fail because corruption detection requires simultaneous reasoning about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Financial anomalies (pattern matching)&lt;/li&gt;
&lt;li&gt;Relationship networks (graph traversal)&lt;/li&gt;
&lt;li&gt;Legal compliance (rule evaluation)&lt;/li&gt;
&lt;li&gt;Industry context (domain knowledge)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-swarm-architecture"&gt;The Swarm Architecture&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Specialist Agents (The Workers):&lt;/strong&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>Fenra is a multi-agent system for detecting corruption patterns in public procurement data. It uses a swarm of specialized AI agents coordinated by a verification layer called &ldquo;the Judge.&rdquo;</p>
<h3 id="the-problem">The Problem</h3>
<p>Corruption in procurement leaves traces across multiple systems—financial records, company registries, contract documents. The patterns are obvious in hindsight but buried under noise in real-time. Single AI models fail because corruption detection requires simultaneous reasoning about:</p>
<ul>
<li>Financial anomalies (pattern matching)</li>
<li>Relationship networks (graph traversal)</li>
<li>Legal compliance (rule evaluation)</li>
<li>Industry context (domain knowledge)</li>
</ul>
<h3 id="the-swarm-architecture">The Swarm Architecture</h3>
<p><strong>Specialist Agents (The Workers):</strong></p>
<ul>
<li><strong>Transaction Analyzer</strong>: Detects outliers in amounts, timing, and frequency</li>
<li><strong>Network Mapper</strong>: Traverses knowledge graphs to find hidden relationships between companies and officials</li>
<li><strong>Legal Checker</strong>: Flags procedural violations against procurement regulations</li>
<li><strong>Document Reader</strong>: Extracts entities and relationships from unstructured text</li>
</ul>
<p><strong>The Judge (The Verifier):</strong></p>
<ul>
<li>Validates findings against evidence</li>
<li>Checks for contradictions between agents</li>
<li>Assigns confidence scores</li>
<li>Only escalates high-confidence, well-supported flags</li>
</ul>
<h3 id="graph-rag">Graph RAG</h3>
<p>Fenra uses Graph RAG instead of standard vector search. Entities (companies, people, transactions) are nodes; relationships are edges. This enables multi-hop reasoning:</p>
<blockquote>
<p>&ldquo;Company A paid Company B → Company B&rsquo;s director is Person C → Person C is related to Procurement Officer D&rdquo;</p>
</blockquote>
<p>The graph structure also provides explainability—every flag comes with an auditable path.</p>
<h3 id="tech-stack">Tech Stack</h3>
<ul>
<li><strong>Neo4j</strong> for relationship data and graph traversal</li>
<li><strong>Vector store</strong> for semantic search over documents</li>
<li><strong>OCaml</strong> for the core logic—type safety for financial and legal data</li>
<li><strong>Erlang</strong> for agent orchestration—hot code reloading without downtime</li>
</ul>
]]></content:encoded></item><item><title>Kowalski</title><link>https://rorimwema.github.io/projects/kowalski/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://rorimwema.github.io/projects/kowalski/</guid><description>&lt;p&gt;Kowalski is a set-and-forget tax agentic-first platform designed for Kenyan SMEs.&lt;/p&gt;
&lt;h3 id="what-it-does"&gt;What It Does&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-gateway ingestion&lt;/strong&gt;: Pulls transactions from M-Pesa, bank APIs, Stripe, and other payment providers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI-driven reconciliation&lt;/strong&gt;: Automatically matches payments to invoices, categorizes expenses, and flags anomalies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Immutable tax rules&lt;/strong&gt;: Kenyan tax regulations encoded as verifiable logic—no guesswork, no drift&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct KRA filing&lt;/strong&gt;: Files returns directly to the Kenya Revenue Authority via eTIMS/GavaConnect APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="why-agentic"&gt;Why Agentic?&lt;/h3&gt;
&lt;p&gt;Instead of rigid automation, Kowalski uses specialized agents that handle different aspects of tax compliance:&lt;/p&gt;</description><content:encoded><![CDATA[<p>Kowalski is a set-and-forget tax agentic-first platform designed for Kenyan SMEs.</p>
<h3 id="what-it-does">What It Does</h3>
<ul>
<li><strong>Multi-gateway ingestion</strong>: Pulls transactions from M-Pesa, bank APIs, Stripe, and other payment providers</li>
<li><strong>AI-driven reconciliation</strong>: Automatically matches payments to invoices, categorizes expenses, and flags anomalies</li>
<li><strong>Immutable tax rules</strong>: Kenyan tax regulations encoded as verifiable logic—no guesswork, no drift</li>
<li><strong>Direct KRA filing</strong>: Files returns directly to the Kenya Revenue Authority via eTIMS/GavaConnect APIs</li>
</ul>
<h3 id="why-agentic">Why Agentic?</h3>
<p>Instead of rigid automation, Kowalski uses specialized agents that handle different aspects of tax compliance:</p>
<ul>
<li><strong>Ingestion Agent</strong>: Handles API connections, rate limiting, and data normalization</li>
<li><strong>Reconciliation Agent</strong>: Uses ML to match fuzzy transaction descriptions to actual business activities</li>
<li><strong>Compliance Agent</strong>: Applies Kenyan tax rules (VAT, income tax, withholding) to categorized transactions</li>
<li><strong>Filing Agent</strong>: Prepares and submits returns, handling KRA&rsquo;s specific formatting requirements</li>
</ul>
<p>Each agent reports to a supervisor that ensures consistency and flags edge cases for human review.</p>
<h3 id="built-with">Built With</h3>
<ul>
<li><strong>OCaml</strong> for the tax rule engine—type safety is non-negotiable when dealing with government compliance</li>
<li><strong>Erlang/OTP</strong> for the agent orchestration—fault tolerance and hot code reloading are essential for financial systems</li>
<li><strong>LLMs</strong> for classification and anomaly detection, constrained by structured output schemas</li>
</ul>
]]></content:encoded></item><item><title>Neovim Config</title><link>https://rorimwema.github.io/projects/nvim-config/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid>https://rorimwema.github.io/projects/nvim-config/</guid><description>&lt;p&gt;My personal Neovim configuration. I&amp;rsquo;ve spent way too many hours tweaking this to be the perfect dev environment.&lt;/p&gt;
&lt;h3 id="features"&gt;Features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blazing Fast&lt;/strong&gt;: Startup time &amp;lt; 50ms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LSP Support&lt;/strong&gt;: Native LSP integration for TypeScript, Go, Rust, OCaml, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin Manager&lt;/strong&gt;: Uses &lt;code&gt;lazy.nvim&lt;/code&gt; for efficient plugin loading.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aesthetics&lt;/strong&gt;: Custom colorscheme integration (Flexoki support included).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the &lt;a href="https://github.com/rorimwema/nvim-config"&gt;repository&lt;/a&gt; for installation instructions.&lt;/p&gt;</description><content:encoded><![CDATA[<p>My personal Neovim configuration. I&rsquo;ve spent way too many hours tweaking this to be the perfect dev environment.</p>
<h3 id="features">Features</h3>
<ul>
<li><strong>Blazing Fast</strong>: Startup time &lt; 50ms.</li>
<li><strong>LSP Support</strong>: Native LSP integration for TypeScript, Go, Rust, OCaml, and more.</li>
<li><strong>Plugin Manager</strong>: Uses <code>lazy.nvim</code> for efficient plugin loading.</li>
<li><strong>Aesthetics</strong>: Custom colorscheme integration (Flexoki support included).</li>
</ul>
<p>Check out the <a href="https://github.com/rorimwema/nvim-config">repository</a> for installation instructions.</p>
]]></content:encoded></item></channel></rss>