<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Aniruth Karthik</title><link>https://aniruthk.me/</link><description>Recent content on Aniruth Karthik</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 17 Sep 2026 01:50:00 +0530</lastBuildDate><atom:link href="https://aniruthk.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Teaching an AI to Play Mini Metro: A Custom Go Engine and a 4,087-Action Graph Neural Network</title><link>https://aniruthk.me/teaching-an-ai-to-play-mini-metro-a-custom-go-engine-and-a-4087-action-graph-neural-network/</link><pubDate>Thu, 17 Sep 2026 01:50:00 +0530</pubDate><guid>https://aniruthk.me/teaching-an-ai-to-play-mini-metro-a-custom-go-engine-and-a-4087-action-graph-neural-network/</guid><description>&lt;p&gt;For a very long time, I wanted to build an AI that could play a game noticeably better than a human. Something like Stockfish for chess, but scaled to a project that one person could actually design from scratch.&lt;/p&gt;&#10;&lt;p&gt;A while back, I played a game called &lt;em&gt;Mini Metro&lt;/em&gt;. At first glance, it looks convincingly clean and simple: a white canvas, a few colored lines, geometric stations, and tiny rectangular trains picking up passengers. But once you play for ten minutes, the city expands, passenger demand explodes, transfer stations get overwhelmed, and whatever tidy transit network you thought you had designed collapses into chaos. I struggled to make real progress in it, and eventually I stepped away.&lt;/p&gt;</description></item><item><title>I Deleted 3,873 Lines at Midnight: How I Built a Local-First Multi-Agent DAG Engine in Go</title><link>https://aniruthk.me/i-deleted-3873-lines-at-midnight-how-i-built-a-local-first-multi-agent-dag-engine-in-go/</link><pubDate>Wed, 20 May 2026 02:50:00 +0530</pubDate><guid>https://aniruthk.me/i-deleted-3873-lines-at-midnight-how-i-built-a-local-first-multi-agent-dag-engine-in-go/</guid><description>&lt;p&gt;When I first learned Go, I wanted to build a complete project in the language so that I could learn it properly while building something useful. I wanted to build the entire system from scratch, and figure things out along the way.&lt;/p&gt;&#10;&lt;p&gt;Around the same time, I was exploring LLM agents and how they could be used to automate tasks by breaking them down into smaller steps.&lt;/p&gt;&#10;&lt;p&gt;So, I decided to build my own LLM Orchestrator from scratch in Go, learning and figuring things out as I went.&lt;/p&gt;</description></item><item><title>qrtunnel: One Command. One QR Scan. No Accounts, No Firewall Rules, No Contact Sharing.</title><link>https://aniruthk.me/qrtunnel-one-command.-one-qr-scan.-no-accounts-no-firewall-rules-no-contact-sharing./</link><pubDate>Sun, 12 Apr 2026 11:27:19 +0530</pubDate><guid>https://aniruthk.me/qrtunnel-one-command.-one-qr-scan.-no-accounts-no-firewall-rules-no-contact-sharing./</guid><description>&lt;p&gt;I hated the sheer friction of moving a single file between my laptop and my phone.&lt;/p&gt;&#10;&lt;p&gt;Think about how ridiculous this workflow normally is. If I have an iPhone and a MacBook, AirDrop is fine. But the second I am on Linux or Windows with an Android phone (or an iPhone), moving a video, a PDF, or a photo album turns into a chore. Bluetooth on desktop Linux transfers at a miserable 200 KB/s when pairing actually works, which is almost never. Sending a file to myself on Telegram, Slack, or Google Drive feels absurd when my phone is sitting five inches away on my desk. And if I spin up Python&amp;rsquo;s built-in &lt;code&gt;python -m http.server&lt;/code&gt;, I have to open a new terminal tab, run &lt;code&gt;ip addr&lt;/code&gt; or &lt;code&gt;ifconfig&lt;/code&gt; to find my local IP, type out something like &lt;code&gt;http://192.168.1.44:8000/my-super-long-document-name.pdf&lt;/code&gt; on my tiny phone keyboard, and pray that the campus or coffee shop Wi-Fi doesn&amp;rsquo;t have client isolation enabled.&lt;/p&gt;</description></item></channel></rss>