<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FastAPI on Narasimha Karthik J</title><link>https://jnk234.github.io/tags/fastapi/</link><description>Recent content in FastAPI on Narasimha Karthik J</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 09 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jnk234.github.io/tags/fastapi/index.xml" rel="self" type="application/rss+xml"/><item><title>Kyn: Multi-Agent Company Brain</title><link>https://jnk234.github.io/projects/kyn-multi-agent-company-brain/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid isPermaLink="false">https://jnk234.github.io/projects/kyn-multi-agent-company-brain/#full</guid><description>&lt;p&gt;&lt;a href="https://github.com/JNK234/KYN" target="_blank" rel="noreferrer"&gt;Code on GitHub&lt;/a&gt; · &lt;a href="https://kyn-xi.vercel.app/" target="_blank" rel="noreferrer"&gt;Live demo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="what-it-is" class="relative group"&gt;What it is &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-it-is" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;A team build for the Nozomio Hackathon, Track 4 (&amp;ldquo;The Company Brain&amp;rdquo;, on Nia and Hyperspell). You describe a work problem, such as &amp;ldquo;why are payments failing?&amp;rdquo;, and a supervisor agent decides what context it needs, gathers it, acts, and records what it learned.&lt;/p&gt;
&lt;p&gt;I built the agent and backend: the supervisor and subagents, the tools, the seed corpus, the FastAPI server, and the wiring of the run-view UI to the live event stream. A teammate built the design system and the static UI mockup.&lt;/p&gt;
&lt;h2 id="how-it-works" class="relative group"&gt;How it works &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#how-it-works" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supervisor plus four subagents as tools&lt;/strong&gt;, using the OpenAI Agents SDK. Code context searches an indexed repo through Nia. Company context searches Slack, email, Notion, contracts and tickets through Hyperspell. Memory recalls similar past problems early and writes lessons back before the run ends. Action produces outputs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Playbooks by intent.&lt;/strong&gt; The supervisor classifies the problem as an incident, a question, or a briefing. Only incidents open a PR and send messages; questions get a cited answer and no actions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real actions.&lt;/strong&gt; For a code fix, the Action agent clones the target repo, runs Codex CLI with a small, size-capped instruction, commits, pushes, and opens a PR, then drafts a Gmail and posts to Slack. Evidence goes in the PR body, not the Codex prompt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seed corpus.&lt;/strong&gt; A fictional payments company with about six weeks of Slack, email, Notion, contract, PR and ticket data around one incident: a retry bug that amplifies a vendor&amp;rsquo;s rate limit. An early support ticket hints at the problem, so the agent can connect it where the humans in the story did not.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server.&lt;/strong&gt; FastAPI streams run events over SSE, saves each run to disk, and can replay past runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="whats-notable" class="relative group"&gt;What&amp;rsquo;s notable &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#whats-notable" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;The repo includes artifacts from real runs: RCA skeletons, code-patch proposals and PR drafts for the rate-limit incident.&lt;/p&gt;</description></item><item><title>LockIn: Browser Focus Tracker</title><link>https://jnk234.github.io/projects/lockin-browser-focus-tracker/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="false">https://jnk234.github.io/projects/lockin-browser-focus-tracker/#full</guid><description>&lt;p&gt;&lt;a href="https://github.com/JNK234/lockin" target="_blank" rel="noreferrer"&gt;Code on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="what-it-is" class="relative group"&gt;What it is &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-it-is" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;You start a session with a goal, such as &amp;ldquo;fix auth bug in login flow&amp;rdquo;. The extension records each page you open. An LLM labels each visit on-task, distraction or ambiguous relative to that goal. If you drift, an overlay nudges you and offers to take you back. When the session ends you get a focus report.&lt;/p&gt;
&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://raw.githubusercontent.com/JNK234/lockin/main/docs/images/report-dashboard.png" alt="Focus report dashboard" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="how-it-works" class="relative group"&gt;How it works &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#how-it-works" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Extension (Manifest V3).&lt;/strong&gt; Sends each page load, with its URL, title and page text, to the backend, and polls a nudge endpoint every 60 seconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend (FastAPI).&lt;/strong&gt; Stores the visit and returns at once. Classification runs as a background task, so browsing never waits on the model.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Classification.&lt;/strong&gt; A RocketRide pipeline sends GPT-4o the goal, URL, title and the first 2,000 characters of the page, and asks for a JSON label and reason.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph storage (Neo4j).&lt;/strong&gt; Sessions, tasks, visits, sites and nudges are nodes. Visits link in order with &lt;code&gt;NEXT&lt;/code&gt; edges, and sites link to tasks as &lt;code&gt;ON_TASK_FOR&lt;/code&gt; or &lt;code&gt;DISTRACTION_FROM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Report and Q&amp;amp;A.&lt;/strong&gt; The report shows a focus score, a color-coded timeline, a per-site breakdown and LLM insights. A second pipeline answers plain-language questions about past sessions by querying the graph.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Neo4j runs in Docker Compose, and a seed script loads a demo session.&lt;/p&gt;</description></item></channel></rss>