<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ankit Builds]]></title><description><![CDATA[Ankit Builds]]></description><link>https://ankitonair.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 26 Oct 2026 18:39:46 GMT</lastBuildDate><atom:link href="https://ankitonair.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Day 2: I Gave My AI Agent a Brain, a Body, and Hands — Here's What Happened]]></title><description><![CDATA[Building an app with an AI engineering team. Documenting every step.]]></description><link>https://ankitonair.hashnode.dev/day-2-i-gave-my-ai-agent-a-brain-a-body-and-hands-here-s-what-happened</link><guid isPermaLink="true">https://ankitonair.hashnode.dev/day-2-i-gave-my-ai-agent-a-brain-a-body-and-hands-here-s-what-happened</guid><dc:creator><![CDATA[sharmaankit]]></dc:creator><pubDate>Thu, 02 Jul 2026 22:07:06 GMT</pubDate><content:encoded><![CDATA[<p>There's a moment I want to tell you about before anything else.</p>
<p>Late in Day 2, I typed this into Claude Desktop:</p>
<blockquote>
<p>"Read my product vision and my tech stack decision, then suggest three features I should add to my backlog and write them to /Backlog/ideas.md"</p>
</blockquote>
<p>Claude read two files from my local filesystem, reasoned about the product, generated three genuinely relevant features with detailed rationale, and wrote them directly into my Obsidian vault.</p>
<p>I didn't write a script. I didn't call an API. I just asked, in plain English, and watched an AI agent complete a real task on my actual system.</p>
<p>That's what Day 2 was about. Here's how we got there.</p>
<hr />
<h2>The company brain: Obsidian</h2>
<p>The first thing I set up wasn't a coding tool. It was a knowledge system.</p>
<p>Most developers would skip this and start coding immediately. That would be a mistake — especially when you're building with AI agents. The reason is subtle but important:</p>
<p><strong>AI models have no memory between sessions.</strong> Every time you call a language model, it starts completely fresh. It doesn't know your product vision, your architecture decisions, or your team's working principles. Without a knowledge system, every agent interaction is context-free.</p>
<p>The solution is a knowledge layer that agents can query. I set up Obsidian for this — not because it's a great note-taking app (though it is), but because of one property: <strong>every note is a plain markdown file on your local filesystem.</strong></p>
<p>That matters because a plain markdown file can be read with a single filesystem call. No API, no extraction layer, no special integration. An AI agent can read it the same way you would.</p>
<p>I structured the vault like a real company:</p>
<pre><code class="language-plaintext">app-brain/
├── Vision/          ← product north star
├── Product/         ← PRDs and features
├── Architecture/    ← technical decisions (ADRs)
├── UI/              ← design principles
├── AI/              ← prompt library
├── Research/        ← experiments and findings
├── Agent Memory/    ← what agents have decided
├── Decisions/       ← major choices with rationale
├── Backlog/         ← features and ideas
└── Journal/         ← daily learning log
</code></pre>
<p>This vault isn't just notes. It's the foundation of what will eventually become a RAG (Retrieval-Augmented Generation) memory system — where agents query it semantically before every task. I wrote the first real documents: a product vision, a tech stack decision, and today's journal entry.</p>
<hr />
<h2>The AI coding environment</h2>
<p>Next: Cursor and Claude Code.</p>
<p>These are worth distinguishing clearly because most people treat them as the same thing.</p>
<p><strong>Cursor</strong> is for me. It's an AI-native code editor (built on VS Code) that I use when reviewing code, debugging, or making direct changes. It understands my entire codebase.</p>
<p><strong>Claude Code</strong> is for agents. It's a CLI tool that can read files, write code, run terminal commands, and open pull requests — autonomously, without me sitting there. It's what the implementation agents in my pipeline will use to actually write code.</p>
<p>One is a tool I use. The other is a tool that agents use. They complement each other perfectly.</p>
<p>A practical lesson here: I initially thought Claude Code needed a separate Anthropic API key. It doesn't. <strong>Claude Code works with a claude.ai Pro subscription</strong> — the same one you use for this interface. No separate billing. No API key. Just log in with your existing account.</p>
<hr />
<h2>My Mac is now an AI server</h2>
<p>This was the most surprising part of Day 2.</p>
<p>I installed Ollama — a local LLM runtime — and pulled three models: qwen3, llama3, and gemma3. These are large language models running entirely on my Mac, using the GPU and Neural Engine inside Apple Silicon.</p>
<p>After about five minutes of setup, I had this running:</p>
<pre><code class="language-bash">curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen3", "messages": [{"role": "user", "content": "What is progressive overload?"}]}'
</code></pre>
<p>A local AI model, responding in under a second, with no internet connection, no API costs, no data leaving my machine.</p>
<p>The technical detail that matters: Ollama exposes an OpenAI-compatible API at <code>localhost:11434</code>. The same code that calls GPT-4 or Claude can call a local qwen3 model by changing one line. This compatibility is what makes local models a genuine alternative rather than a toy — your agents can switch between cloud and local models as a configuration choice, not an architectural one.</p>
<p>For this app specifically, this matters enormously. The app handles personal health data — workout history, body metrics, recovery patterns. That data should never leave the device by default. Local models make that possible.</p>
<hr />
<h2>MCP: giving AI hands</h2>
<p>The last piece of Day 2 was the one that changed my understanding of what agents can actually do.</p>
<p>Up to now, Claude could read messages and reply with text. Useful, but limited. MCP (Model Context Protocol) is what changes that.</p>
<p>MCP is a protocol — think of it as USB-C for AI. Just as USB-C lets any peripheral connect to any computer through a standard connector, MCP lets any tool connect to any AI model through a standard protocol. You write an MCP server that exposes tools (read a file, create a GitHub issue, query a database), and any MCP-compatible AI client can use those tools.</p>
<p>I configured Claude Desktop with two MCP servers:</p>
<p><strong>Filesystem MCP</strong> — lets Claude read and write files on my local system, specifically my Obsidian vault at <code>~/Documents/app-brain</code></p>
<p><strong>GitHub MCP</strong> — lets Claude read issues, repositories, and pull requests from my GitHub account</p>
<p>A practical note: Claude Desktop needs the full absolute path to <code>npx</code>, not just the command name. It runs in a restricted shell environment where it can't find executables the same way your terminal can. Running <code>which npx</code> and using that full path in the config fixed a frustrating issue that took some debugging to identify.</p>
<hr />
<h2>The moment it clicked</h2>
<p>Once MCP was working, I tested it with the request I opened this post with.</p>
<p>Claude read my <code>Vision/product-vision.md</code>. It read my <code>Architecture/ADRs/001-tech-stack.md</code>. It reasoned about the product — audio-first, local AI, personal health data — and generated three features that genuinely fit the product principles. Then it wrote all three directly to <code>Backlog/ideas.md</code> with detailed rationale for each.</p>
<p>I opened Obsidian. The file was updated.</p>
<p>This is a small version of the autonomous pipeline I'm building toward. The difference between today and the end goal is that today I'm in the conversation asking for it. In a few months, a GitHub Issue will trigger it, agents will run overnight, and I'll wake up to a pull request.</p>
<hr />
<h2>What I learned</h2>
<p><strong>1. The knowledge system comes before the code.</strong> Building Obsidian first was the right call. Agents are only as good as the context they have access to.</p>
<p><strong>2. There are three different Claudes and they are not interchangeable.</strong> claude.ai is the web interface. Claude Code is the CLI coding agent. Claude Desktop is the local MCP host. Each does something different. Confusing them wastes hours.</p>
<p><strong>3. Your Mac is genuinely capable AI hardware.</strong> Apple Silicon's unified memory architecture means 7B parameter models run well on 16GB RAM. Local AI is not a compromise — it's a legitimate production choice, especially for privacy-sensitive data.</p>
<p><strong>4. MCP is the moment agents become useful.</strong> Text generation is interesting. An agent that can read your files, check your GitHub, and write to your knowledge base is actually useful. That line matters.</p>
<hr />
<h2>What's next</h2>
<p>Day 3 starts the agent infrastructure layer: PydanticAI for structured agent outputs, FastAPI for the backend API, and the first real feature built entirely by an AI agent.</p>
<p>The stack is coming together. The foundation is solid.</p>
<hr />
<p><em>Building with an AI engineering team — documenting everything.</em></p>
<p><em>X: [@ankitOnAIr]</em></p>
]]></content:encoded></item><item><title><![CDATA[I'm Building an App With an AI Engineering Team — Here's the Infrastructure Layer]]></title><description><![CDATA[How I set up Homebrew, Git, Node.js with fnm, and Python with uv as the foundation for an AI-native app built entirely by AI agents. Day 1 of building in…]]></description><link>https://ankitonair.hashnode.dev/i-m-building-an-app-with-an-ai-engineering-team-here-s-the-infrastructure-layer</link><guid isPermaLink="true">https://ankitonair.hashnode.dev/i-m-building-an-app-with-an-ai-engineering-team-here-s-the-infrastructure-layer</guid><category><![CDATA[buildinpublic]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[agents]]></category><category><![CDATA[Build In Public]]></category><category><![CDATA[AI]]></category><category><![CDATA[#ai-tools]]></category><dc:creator><![CDATA[sharmaankit]]></dc:creator><pubDate>Wed, 01 Jul 2026 17:25:39 GMT</pubDate><content:encoded><![CDATA[<p>I'm an experienced frontend developer. I know how to build things.</p>
<p>But I'm not here to become a better programmer. I'm here to learn something more valuable: how to orchestrate AI systems that build products for me.</p>
<p>The setup: one app, six AI agents, zero human engineers. A PM Agent, an Architect Agent, a Frontend Engineer, a Backend Engineer, an AI Engineer, and a QA Agent. My role is CEO, product owner, and AI orchestrator.</p>
<p>Before any of that can work, I needed a foundation. This post covers exactly what I installed today, why each piece matters, and the mental model that reframed how I'm thinking about all of it.</p>
<hr />
<h2>The mental model that changed everything</h2>
<p>A traditional software company has humans in every role. I'm building the same company — but AI fills every role below CEO.</p>
<p>My job is not to write code. My job is to design the system, direct the agents, review their outputs, and make product decisions. I am the only human in the building.</p>
<p>The long-term goal is a pipeline that looks like this:</p>
<blockquote>
<p>Me on my phone → create a task → automated workflow triggers → PM Agent writes the spec → Architect designs it → implementation agent writes the code → QA Agent reviews it → Pull Request opens → I get notified.</p>
</blockquote>
<p>All while I'm away. Or sleeping.</p>
<p>Everything I installed today serves that eventual goal. Nothing is arbitrary.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6a4445e778bdeaf95ce14a5b/fe38b71a-dbdc-4b52-9556-26da7c0c25c1.png" alt="Architecture diagram showing 7 layers: from infrastructure at the bottom to the human CEO at the top" style="display:block;margin:0 auto" />

<p><em>The full system — seven layers, each one enabling the layer above it. Screenshot from my setup session.</em></p>
<hr />
<h2>The foundation: four tools, one purpose</h2>
<p>Before AI tooling, agents, or frameworks — I needed the ground floor. Four tools. Each one a prerequisite for the next.</p>
<h3>1. Homebrew — the package manager</h3>
<p>Everything else depends on this.</p>
<p>Homebrew is macOS's package manager. Instead of manually downloading installers and fighting with PATH configuration, one command handles installation, versioning, and updates for any tool.</p>
<pre><code class="language-bash">brew install ollama
brew install uv  
brew install fnm
</code></pre>
<p>The reason this matters beyond convenience: the AI engineering ecosystem moves extremely fast. Models update weekly. Frameworks ship breaking changes monthly. A package manager means <code>brew upgrade</code> keeps everything current with one command. Without it, staying current becomes a part-time job.</p>
<p><strong>The principle I'm carrying forward:</strong> understand each tool before installing it. Don't install things because a guide says to — install them because you understand what they do and why you need them.</p>
<h3>2. Git + GitHub — the communication protocol</h3>
<p>In an AI-native company, Git plays a role it was never designed for. It's not just version control — it's the communication protocol between me and my agents.</p>
<ul>
<li><p><strong>GitHub Issues</strong> → how I give agents tasks</p>
</li>
<li><p><strong>Pull Requests</strong> → how agents deliver their work back to me</p>
</li>
<li><p><strong>GitHub webhooks</strong> → how the workflow engine gets notified and kicks off pipelines</p>
</li>
</ul>
<p>One thing that came up: I already had Git installed via Xcode Command Line Tools. The right call was not to install a duplicate. Understanding what you already have is as important as knowing what to install.</p>
<p>The critical step was SSH key setup — the cryptographic handshake that lets Claude Code push pull requests to GitHub autonomously. Without it, the automated pipeline has no way to deliver.</p>
<h3>3. fnm + Node.js — the JavaScript runtime</h3>
<p>Several tools in this stack run on Node.js: Claude Code, the Ionic mobile framework, and n8n (the workflow engine I'll use to wire agents together).</p>
<p>But instead of installing Node.js directly, I used <strong>fnm</strong> — Fast Node Manager.</p>
<p>The reason: different projects need different Node.js versions. A version manager lets you install multiple versions and switch between them automatically, based on a <code>.node-version</code> file in each project directory. fnm is written in Rust and significantly faster than the older nvm alternative.</p>
<pre><code class="language-bash">brew install fnm
echo 'eval "$(fnm env --use-on-cd --shell zsh)"' &gt;&gt; ~/.zshrc
fnm install --lts
</code></pre>
<p>The <code>--use-on-cd</code> flag is what makes it automatic — change directory, correct version activates. No thinking required.</p>
<h3>4. uv — the Python revolution</h3>
<p>This was the most satisfying step of the day.</p>
<p>Python historically required five separate tools to manage properly: <code>pyenv</code> for versions, <code>pip</code> for packages, <code>virtualenv</code> for isolation, <code>pip-tools</code> for locking dependencies, <code>pipx</code> for CLI tools. Five tools, five config formats, five things to keep in sync.</p>
<p><strong>uv replaces all five.</strong></p>
<img src="https://cdn.hashnode.com/uploads/covers/6a4445e778bdeaf95ce14a5b/67d034d2-28b8-4696-965a-3224647077f0.png" alt="Diagram showing 5 coral boxes labeled pyenv, pip, virtualenv, pip-tools, pipx — with an arrow pointing to a single uv box listing all five capabilities" style="display:block;margin:0 auto" />

<p><em>uv collapses five tools into one. Written in Rust by the Astral team.</em></p>
<p>Written in Rust, uv is 10–100x faster than pip at installing packages. The workflow it enables is clean:</p>
<pre><code class="language-bash">uv init my-project        # creates pyproject.toml
uv add fastapi anthropic  # installs + locks dependencies  
uv run python main.py     # runs in isolated environment
</code></pre>
<p>Three commands. Isolated environment. Locked dependencies. Reproducible on any machine — or inside any agent's Docker container. This matters enormously when agents run unattended.</p>
<hr />
<h2>The key concept: layers, not tools</h2>
<p>The most important thing I learned today isn't about any specific tool. It's that these aren't isolated tools — they're layers in a stack, and each layer talks to the one above and below it.</p>
<p>Homebrew installs everything. Git tracks everything. Node.js runs the tooling. Python runs the AI.</p>
<p>Above these four layers comes the interesting part: local AI models, agent frameworks, workflow orchestration, memory systems, and eventually the autonomous pipeline that lets me manage the whole operation from my phone.</p>
<p>The foundation has to be solid before any of that works. Today it is.</p>
<hr />
<h2>What's next</h2>
<ul>
<li><p><strong>Obsidian</strong> — the company brain that eventually becomes RAG memory for agents</p>
</li>
<li><p><strong>Cursor + Claude Code</strong> — the AI-assisted development environment</p>
</li>
<li><p><strong>Ollama</strong> — running local AI models on my own Mac</p>
</li>
<li><p><strong>Claude Desktop + MCP</strong> — wiring agents to real tools and data sources</p>
</li>
</ul>
<p>Building everything in public. Posting as I go. No gatekeeping.</p>
<p>If you're learning AI engineering, building with agents, or trying to figure out how to work <em>with</em> AI rather than just use it — follow along. I'll share everything, including the parts that don't work.</p>
<hr />
<p><em>This is post 1 in a series on building an AI-native app solo. Follow me on X [@ankitOnAIr] for shorter updates between posts.</em></p>
]]></content:encoded></item></channel></rss>