<?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: Aamish</title>
    <description>The latest articles on DEV Community by Aamish (@aamish_491ea6f03bb3294c06).</description>
    <link>https://dev.to/aamish_491ea6f03bb3294c06</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%2F3580493%2F07da5a5c-4b04-4d2e-b7ee-46c9428ba73f.png</url>
      <title>DEV Community: Aamish</title>
      <link>https://dev.to/aamish_491ea6f03bb3294c06</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aamish_491ea6f03bb3294c06"/>
    <language>en</language>
    <item>
      <title>Sol Maze: A Shifting Puzzle Game</title>
      <dc:creator>Aamish</dc:creator>
      <pubDate>Fri, 19 Jun 2026 16:16:58 +0000</pubDate>
      <link>https://dev.to/aamish_491ea6f03bb3294c06/sol-maze-a-shifting-puzzle-game-3475</link>
      <guid>https://dev.to/aamish_491ea6f03bb3294c06/sol-maze-a-shifting-puzzle-game-3475</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://aamishb.github.io/SOL_MAZE/" rel="noopener noreferrer"&gt;Sol Maze&lt;/a&gt;&lt;/strong&gt; is a dynamic, grid-based puzzle game that revolves around the duality of light and shadow. The core mechanic requires players to navigate a maze where the rules of the world flip between "Day" and "Night" phases. During the Day phase, light zones are walkable paths and shadows act as solid walls. When the game shifts to the Night phase, the mechanics invert entirely, the shadows become your paths, and light zones block your way. &lt;/p&gt;

&lt;p&gt;I intended to create a mind-bending puzzle experience where players could play in a shifting environment, with players timing their phase shifts to collect Sun Stones and Moon Stones to unlock the exit. To keep the challenge fresh, I added procedural generation to the game design. The randomised mazes and item placement mean that there is endless replay potential with no two playthroughs being the same and players having to keep changing their strategies&lt;/p&gt;

&lt;p&gt;To tie directly into the challenge theme, I created a special &lt;strong&gt;June Celebration Calendar&lt;/strong&gt; mode. This mode features custom-designed, themed mazes celebrating various events throughout the month of June. Players can explore the colorful paths of the Pride Maze, navigate nature themes for World Environment Day, and experience unique levels dedicated to Juneteenth, &lt;strong&gt;Father's Day (Hardest)&lt;/strong&gt;, World Music Day, and the Summer Solstice itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Video Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The cover image is stylized 3D concept art generated with AI. The actual game is a retro-style 2D grid puzzler!&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/eXsFUGVhBsE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AamishB" rel="noopener noreferrer"&gt;
        AamishB
      &lt;/a&gt; / &lt;a href="https://github.com/AamishB/SOL_MAZE" rel="noopener noreferrer"&gt;
        SOL_MAZE
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/AamishB/SOL_MAZE/assets/icon.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FAamishB%2FSOL_MAZE%2FHEAD%2Fassets%2Ficon.png"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer" href="https://github.com/AamishB/SOL_MAZE/assets/title.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FAamishB%2FSOL_MAZE%2FHEAD%2Fassets%2Ftitle.png"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Welcome to &lt;strong&gt;Sol Maze&lt;/strong&gt;, a grid-based maze game built with Pygame where the core mechanic revolves around the duality of light and shadow during the solstice, but it also features various &lt;a href="https://github.com/AamishB/SOL_MAZE#modes" rel="noopener noreferrer"&gt;modes&lt;/a&gt; to play.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Link : &lt;a href="https://aamishb.github.io/SOL_MAZE/" rel="nofollow noopener noreferrer"&gt;SOL_MAZE&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎮 Gameplay (Standard Mode)&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Day Phase&lt;/strong&gt;: Light zones are walkable paths. Shadows are impassable walls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Night Phase&lt;/strong&gt;: The mechanics invert. Shadows become paths, and light zones become walls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goal&lt;/strong&gt;: Navigate the changing environment to collect &lt;strong&gt;Sun Stones&lt;/strong&gt; (in the light) and &lt;strong&gt;Moon Stones&lt;/strong&gt; (in the dark) to unlock the exit.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 How to Run Locally&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Dependencies&lt;/strong&gt;
Make sure you have Python 3 installed. Then, install the required packages:
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install -r requirements.txt&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run the Game&lt;/strong&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python main.py&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Controls&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arrow Keys&lt;/strong&gt;: Move the player&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tab / S&lt;/strong&gt;: Skip to the next solstice phase (Day &amp;lt;-&amp;gt; Night)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F11&lt;/strong&gt;: Toggle Fullscreen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESC / P&lt;/strong&gt;: Pause Menu&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AamishB/SOL_MAZE" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I developed Sol Maze using &lt;strong&gt;Python&lt;/strong&gt; and &lt;strong&gt;Pygame&lt;/strong&gt; for the core rendering and event loop, alongside &lt;strong&gt;NumPy&lt;/strong&gt; for efficient grid-based maze generation and state manipulation.&lt;/p&gt;

&lt;p&gt;A major technical focus was the shifting "Solstice" mechanic, where the walkability of light and shadow zones dynamically inverts. To manage this and the various &lt;em&gt;June Celebration Calendar&lt;/em&gt; modes cleanly, I separated the game's core state logic (&lt;code&gt;engine.py&lt;/code&gt;) from the frontend rendering (&lt;code&gt;ui/game.py&lt;/code&gt;). This modular approach made it easy to seamlessly introduce new themes, mechanics, and UI overlays.&lt;/p&gt;

&lt;p&gt;I pair-programmed the entire project alongside &lt;strong&gt;Antigravity&lt;/strong&gt;, which helped me prototype mechanics quickly and refine the game's architecture. Finally, I utilized &lt;strong&gt;Pygbag&lt;/strong&gt; (this makes the loading of game slower) to ensure the project could be packaged and played effortlessly in the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Google AI Usage:&lt;/strong&gt; &lt;br&gt;
I used &lt;strong&gt;Antigravity&lt;/strong&gt; as my dedicated coding partner from start to finish helping me build the maze engine, implement the UI, and debug the Pygame loop. Furthermore, the game's background art and visual assets were generated using &lt;strong&gt;Google Gemini AI&lt;/strong&gt;, allowing me to perfectly blend AI-generated aesthetics with AI-assisted code.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>python</category>
    </item>
    <item>
      <title>Sloppy : Chrome Extension for AI Slop Detection with Agentic Postgres</title>
      <dc:creator>Aamish</dc:creator>
      <pubDate>Mon, 10 Nov 2025 05:16:06 +0000</pubDate>
      <link>https://dev.to/aamish_491ea6f03bb3294c06/sloppy-chrome-extension-for-ai-slop-detection-with-agentic-postgres-5fbo</link>
      <guid>https://dev.to/aamish_491ea6f03bb3294c06/sloppy-chrome-extension-for-ai-slop-detection-with-agentic-postgres-5fbo</guid>
      <description>&lt;p&gt;&lt;strong&gt;Sloppy&lt;/strong&gt; is a Chrome extension that detects "slop" (low-quality, AI-generated, templated, repetitive writing) in web pages using &lt;strong&gt;Agentic Postgres&lt;/strong&gt; with real-time multi-agent collaboration. The innovation lies in how each analysis job runs in its own zero-copy database fork where three specialized agents (Collector, Evaluator, Curator) work asynchronously in complete isolation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;The web is increasingly filled with AI-generated content that lacks authenticity - generic marketing copy, repetitive templates, keyword-stuffed paragraphs, and low-value "content mill" writing. Readers need a way to quickly identify this "slop" to make informed decisions about content quality.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;Sloppy analyzes web pages in real-time, assigning each paragraph a quality score based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Template phrase detection&lt;/strong&gt;: Identifies overused buzzwords ("cutting-edge", "world-class", "leverage synergy")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repetition analysis&lt;/strong&gt;: Detects repeated sentence structures and phrases using pg_trgm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic similarity&lt;/strong&gt;: Uses pgvector to find suspiciously similar paragraphs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI writing patterns&lt;/strong&gt;: Flags generic transitions like "It's important to note", "Moreover", "Furthermore"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low lexical diversity&lt;/strong&gt;: Identifies vocabulary repetition and generic language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What makes Sloppy unique is its &lt;strong&gt;fork-based architecture&lt;/strong&gt; - every analysis runs in a dedicated database fork, enabling true agent isolation, parallel processing, and fearless experimentation without polluting the main database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Agentic Postgres?
&lt;/h3&gt;

&lt;p&gt;Traditional approaches would require complex application-level coordination, locking mechanisms, and careful state management. With Tiger's zero-copy forks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Instant isolation&lt;/strong&gt;: Each job gets its own database snapshot in milliseconds&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Zero overhead&lt;/strong&gt;: No data duplication, forks share underlying storage&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Clean rollback&lt;/strong&gt;: Failed analyses simply discard their fork&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Parallel execution&lt;/strong&gt;: Multiple jobs run simultaneously without interference&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Agent collaboration&lt;/strong&gt;: Agents communicate through fork-local tables&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/AamishB/Sloppy" rel="noopener noreferrer"&gt;https://github.com/AamishB/Sloppy&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Extension in Action
&lt;/h4&gt;

&lt;p&gt;The Chrome extension analyzing a webpage with the Sloppy icon showing the quality score:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74s4odudvqcnglgu9sop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74s4odudvqcnglgu9sop.png" alt="Extension analyzing page" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Real-time WebSocket updates show progress as agents work through the analysis&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. In-Page Highlighting
&lt;/h4&gt;

&lt;p&gt;Color-coded highlights directly on the webpage showing problematic content:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh2uy2p2jjt39yi15wkx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh2uy2p2jjt39yi15wkx.png" alt="Highlighted slop" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Yellow highlights for medium slop (20-60%), red for high slop (&amp;gt;60%)&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Detailed Tooltips
&lt;/h4&gt;

&lt;p&gt;Hovering over highlights reveals specific issues detected:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4prjjdvi8oskjkctafd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4prjjdvi8oskjkctafd.png" alt="Tooltip details" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paragraph-level scoring with reasons: template phrases, repetition, AI patterns&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Results Dashboard
&lt;/h4&gt;

&lt;p&gt;The extension popup showing overall quality metrics:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fypgw2cgczu1xd4no70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fypgw2cgczu1xd4no70.png" alt="Results dashboard" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Overall score: 59% - indicating significant quality issues detected&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Try It
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repo: &lt;code&gt;git clone https://github.com/AamishB/Sloppy.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install dependencies: &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set up environment variables in &lt;code&gt;.env&lt;/code&gt; (DATABASE_URL, TIGER_CLI_PATH)&lt;/li&gt;
&lt;li&gt;Initialize Database Schema: &lt;code&gt;psql $DATABASE_URL -f db/schema.sql&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run the server: &lt;code&gt;uvicorn fastapi_app.main:app --reload --port 8000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Load the &lt;code&gt;extension/&lt;/code&gt; folder in Chrome as an unpacked extension&lt;/li&gt;
&lt;li&gt;Visit any webpage and click the Sloppy icon to analyze&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Test page included&lt;/strong&gt;: &lt;code&gt;test_page.html&lt;/code&gt; contains intentional AI slop for testing&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Agentic Postgres
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔱 Zero-Copy Database Forks (Core Innovation)
&lt;/h3&gt;

&lt;p&gt;Every analysis job creates its own fork using Tiger CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Create isolated fork for this job
&lt;/span&gt;&lt;span class="n"&gt;tiger&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="n"&gt;fork&lt;/span&gt; &lt;span class="n"&gt;job_name&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="n"&gt;fork_page_abc123&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this matters&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Isolation&lt;/strong&gt;: Each job operates in complete isolation without locks or conflicts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Zero-copy means instant fork creation (&amp;lt; 100ms vs minutes for traditional clones)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean slate&lt;/strong&gt;: Failed analyses don't pollute the main database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel execution&lt;/strong&gt;: 10+ jobs can run simultaneously, each in their own fork&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 Multi-Agent Collaboration Architecture
&lt;/h3&gt;

&lt;p&gt;Three specialized agents collaborate within each fork:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqn5oza37zt3w2wfsjp7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqn5oza37zt3w2wfsjp7.jpg" alt="Architecture Diagram" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key code snippet&lt;/strong&gt; (from &lt;code&gt;fastapi_app/main.py&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agents_with_fork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;job_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Orchestrate agents in isolated fork&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="c1"&gt;# Create zero-copy fork
&lt;/span&gt;    &lt;span class="n"&gt;fork_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;create_tiger_fork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;job_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Agent 1: Collect &amp;amp; embed
&lt;/span&gt;        &lt;span class="n"&gt;paragraphs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;split_paragraphs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;embed_texts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paragraphs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;insert_paragraphs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;paragraphs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Agent 2: Evaluate in parallel (uses fork connection)
&lt;/span&gt;        &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;evaluate_paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;paragraphs&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Agent 3: Curate results
&lt;/span&gt;        &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;aggregate_evaluations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Merge results back to main
&lt;/span&gt;        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;merge_fork_results&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;job_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Clean up fork (instant)
&lt;/span&gt;        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;cleanup_tiger_fork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 Hybrid Search: pgvector + pg_trgm
&lt;/h3&gt;

&lt;p&gt;The Evaluator agent uses Tiger's optimized extensions for powerful hybrid search:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Semantic Similarity (pgvector)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find semantically similar paragraphs (AI pattern detection)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;paragraphs&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;distance&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Full-Text Matching (pg_trgm)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Detect template phrases and repetition&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sim&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;paragraphs&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;-- pg_trgm similarity operator&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;sim&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Combined Power&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Evaluator agent combines both approaches
&lt;/span&gt;&lt;span class="n"&gt;semantic_matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;find_similar_embeddings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;template_matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;find_template_phrases&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;slop_score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;semantic_similarity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;semantic_matches&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;template_count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;template_matches&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;repetition_score&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;calculate_trigram_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;all_paragraphs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This hybrid approach catches both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meaning-based slop&lt;/strong&gt;: Paragraphs that say the same thing differently (pgvector)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern-based slop&lt;/strong&gt;: Repeated phrases and templates (pg_trgm)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Tiger CLI Integration
&lt;/h3&gt;

&lt;p&gt;Sloppy uses Tiger CLI for automated fork management:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fork Creation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tiger service fork job_name &lt;span class="nt"&gt;--now&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; fork_page_abc123 &lt;span class="nt"&gt;--no-set-default&lt;/span&gt; &lt;span class="nt"&gt;--no-wait&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fork Deletion&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tiger service delete fork_page_abc123 &lt;span class="nt"&gt;--confirm&lt;/span&gt; &lt;span class="nt"&gt;--no-wait&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Snapshot Creation&lt;/strong&gt; (for caching):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tiger service fork snapshot fork_page_abc123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt; (Windows-compatible):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_fork&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TIGER_CLI_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fork&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
         &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--now&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fork_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--no-set-default&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;capture_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;returncode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;

&lt;span class="c1"&gt;# Run in thread pool for Windows asyncio compatibility
&lt;/span&gt;&lt;span class="n"&gt;returncode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_event_loop&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;run_in_executor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;create_fork&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🌊 Fluid Storage Pattern
&lt;/h3&gt;

&lt;p&gt;Sloppy demonstrates Tiger's fluid storage capabilities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Data flows through fork lifecycle&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw text → Fork created → Paragraphs inserted → 
Evaluations added → Results aggregated → 
Merged to main → Fork deleted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Caching with forks&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Check cache in main DB
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;text_hash&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cached_result&lt;/span&gt;

&lt;span class="c1"&gt;# Create fork, run analysis
&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;create_fork&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;analyze_in_fork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Cache results in main DB
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;cache_results&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text_hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Snapshot preservation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Curator agent creates snapshot before fork deletion
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;create_snapshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Preserves state for debugging/auditing
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;merge_results&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;delete_fork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fork_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📊 Performance Benefits
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;With Tiger's Agentic Postgres&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ Fork creation: ~50-100ms (zero-copy)&lt;/li&gt;
&lt;li&gt;⚡ Parallel jobs: 10+ concurrent analyses without blocking&lt;/li&gt;
&lt;li&gt;⚡ Cache hit rate: 40-60% (repeated analyses instant)&lt;/li&gt;
&lt;li&gt;⚡ Average analysis time: 5-15 seconds for 20-50 paragraphs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Without forks (traditional approach)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Would require complex application-level locking&lt;/li&gt;
&lt;li&gt;❌ Risk of dirty reads and race conditions&lt;/li&gt;
&lt;li&gt;❌ Difficult to roll back failed analyses&lt;/li&gt;
&lt;li&gt;❌ Limited parallelism due to contention&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overall Experience
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Worked Brilliantly ⭐⭐⭐⭐⭐
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Zero-Copy Forks Changed Everything&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Coming into this challenge, I expected database forks to be expensive. I was wrong. Tiger's zero-copy architecture completely changed how I approach agent orchestration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fearless parallelism&lt;/strong&gt;: I can spin up 10+ analysis jobs simultaneously without worrying about conflicts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean architecture&lt;/strong&gt;: Each job is truly isolated - no more defensive programming around shared state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant cleanup&lt;/strong&gt;: Failed analyses just discard their fork - no need to carefully undo changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "aha moment" was realizing I could treat database forks like Git branches - cheap, disposable, and merga ble. This mental model transformed my architecture from "careful shared-state management" to "fearless fork-per-job isolation".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Hybrid Search is Powerful&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Combining pgvector and pg_trgm created something greater than the sum of its parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pgvector&lt;/strong&gt; catches semantic slop: "This solution offers cutting-edge innovation" vs "Our platform provides state-of-the-art technology" (different words, same empty meaning)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pg_trgm&lt;/strong&gt; catches pattern slop: Repeated phrases, template structures, generic transitions&lt;/li&gt;
&lt;li&gt;Together they achieve ~85% accuracy in slop detection (tested on 100+ pages)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Tiger CLI Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Tiger CLI is remarkably well-designed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear command structure: &lt;code&gt;tiger service fork &amp;lt;service-id&amp;gt; --now --name &amp;lt;fork-name&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;JSON output support for parsing: &lt;code&gt;--output json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fast execution: Commands complete in 100-200ms&lt;/li&gt;
&lt;li&gt;Great error messages: When I got flags wrong, errors were immediately obvious&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Surprise&lt;/strong&gt;: The &lt;code&gt;--no-set-default&lt;/code&gt; flag was crucial - without it, every fork would become my default service, breaking subsequent forks. This isn't obvious from docs but makes perfect sense for automated fork management.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Surprised Me 🤔
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Windows Subprocess Compatibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hit an interesting Windows-specific issue: &lt;code&gt;asyncio.create_subprocess_exec&lt;/code&gt; doesn't work on Windows with ProactorEventLoop (raises &lt;code&gt;NotImplementedError&lt;/code&gt;). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Wrap synchronous &lt;code&gt;subprocess.run&lt;/code&gt; with &lt;code&gt;ThreadPoolExecutor&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;executor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ThreadPoolExecutor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_workers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_fork&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;TIGER_CLI_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...],&lt;/span&gt; &lt;span class="n"&gt;capture_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;returncode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;

&lt;span class="n"&gt;returncode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_in_executor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;create_fork&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern works perfectly and maintains async compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Fork Lifecycle Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initially struggled with fork cleanup timing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too early → results not yet merged&lt;/li&gt;
&lt;li&gt;Too late → accumulating orphaned forks&lt;/li&gt;
&lt;li&gt;Just right → &lt;code&gt;asyncio.create_task(cleanup_tiger_fork(fork_id))&lt;/code&gt; after results merge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The async fire-and-forget pattern lets the main request complete while cleanup happens in background.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. UTF-8 Encoding with Tiger CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tiger CLI occasionally outputs special characters (progress indicators, icons). Without explicit UTF-8 handling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nb"&gt;UnicodeDecodeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;charmap&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="n"&gt;codec&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t decode byte 0x90
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Always specify encoding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;([...],&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;replace&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;errors='replace'&lt;/code&gt; ensures non-UTF-8 bytes don't crash the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I'd Build Next 👷🏼‍♂️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Fork-Per-Agent Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Currently agents share a single fork. Next evolution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Main DB
  ├─ Fork 1: Collector (writes paragraphs)
  ├─ Fork 2: Evaluator (reads paragraphs, writes evaluations)
  └─ Fork 3: Curator (reads evaluations, writes results)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each agent gets its own fork, merging results upstream. This would showcase Tiger's fork merge capabilities even more dramatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Historical Analysis with Snapshots&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use Tiger snapshots to track content quality over time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Compare article quality across snapshots&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;snapshot_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;slop_score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;avg_quality&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;evaluations&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;snapshot_id&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would enable "quality regression detection" - alerting when a website's content quality degrades.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Collaborative Filtering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use pgvector to find users with similar taste in content quality:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Find users who rated similar content similarly&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
       &lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;taste_similarity&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;user_preferences&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;taste_similarity&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build a recommendation system: "Users who flagged this as slop also flagged..."&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Tiger's Agentic Postgres is a paradigm shift&lt;/strong&gt;. I came in thinking forks were an interesting optimization. I left convinced they're a fundamentally better way to architect agent systems.&lt;/p&gt;

&lt;p&gt;The traditional approach (locks, transactions, careful state management) feels archaic now. Why coordinate agents with complex application logic when the database can provide isolation for free?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight&lt;/strong&gt;: Database forks are to agent coordination what Git is to code collaboration. Cheap, disposable, mergeable isolation that enables fearless experimentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you Tiger team&lt;/strong&gt; for building something genuinely innovative. Agentic Postgres isn't just faster Postgres - it's a new way of thinking about data and agents.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>agenticpostgreschallenge</category>
      <category>ai</category>
      <category>postgres</category>
    </item>
  </channel>
</rss>
