<?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: Aagam Jain</title>
    <description>The latest articles on DEV Community by Aagam Jain (@gl01).</description>
    <link>https://dev.to/gl01</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1175635%2F286b75f9-1f06-4554-b8f9-4b43d4947c8b.png</url>
      <title>DEV Community: Aagam Jain</title>
      <link>https://dev.to/gl01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gl01"/>
    <language>en</language>
    <item>
      <title>I kept losing project context, so I built a local Mac workspace with MCP, CLI, and hybrid RAG</title>
      <dc:creator>Aagam Jain</dc:creator>
      <pubDate>Sun, 10 May 2026 05:58:10 +0000</pubDate>
      <link>https://dev.to/gl01/i-kept-losing-project-context-so-i-built-a-local-mac-workspace-with-mcp-cli-and-hybrid-rag-4koo</link>
      <guid>https://dev.to/gl01/i-kept-losing-project-context-so-i-built-a-local-mac-workspace-with-mcp-cli-and-hybrid-rag-4koo</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Like a lot of developers, I live in &lt;strong&gt;several surfaces at once&lt;/strong&gt;: an editor, a terminal, notes, task lists, and an AI assistant. Each one is fine on its own. Together, they’re awful at &lt;strong&gt;one thing&lt;/strong&gt;: keeping a &lt;strong&gt;single, trustworthy slice of project context&lt;/strong&gt; in sync.&lt;/p&gt;

&lt;p&gt;I was tired of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Re-explaining the same background to Claude&lt;/li&gt;
&lt;li&gt;Copy-pasting chunks of notes or repo context&lt;/li&gt;
&lt;li&gt;“Knowing” something lived in &lt;em&gt;some&lt;/em&gt; doc or ticket, but not being able to &lt;strong&gt;pull the exact passage&lt;/strong&gt; when I needed it &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted &lt;strong&gt;one local place&lt;/strong&gt; for workspace + knowledge, but I also wanted that data &lt;strong&gt;everywhere on my Mac&lt;/strong&gt;—not trapped in a single app.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/aagam-headout/deepthink" rel="noopener noreferrer"&gt;&lt;strong&gt;DeepThink&lt;/strong&gt;&lt;/a&gt; is a &lt;strong&gt;local-first&lt;/strong&gt; workspace for macOS: projects, notes, tasks, reminders, and a personal knowledge base, with a &lt;strong&gt;native SwiftUI&lt;/strong&gt; UI so you can actually browse and edit your data like a real app. &lt;/p&gt;

&lt;p&gt;On top of that, it ships:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;MCP server&lt;/strong&gt; so MCP-capable clients can read and update what the app manages&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;deepthink&lt;/code&gt; &lt;strong&gt;CLI&lt;/strong&gt; for terminal workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid RAG&lt;/strong&gt; (keyword + semantic retrieval) so assistants can attach &lt;strong&gt;tight excerpts&lt;/strong&gt; instead of whole directories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Persistence is on your machine (SwiftData plus on-disk markdown and embeddings under &lt;code&gt;~/DeepThink/&lt;/code&gt;). The goal isn’t “another notes app”—it’s &lt;strong&gt;one workspace&lt;/strong&gt; that other tools can &lt;strong&gt;see and reuse&lt;/strong&gt; through &lt;strong&gt;MCP&lt;/strong&gt; and &lt;strong&gt;CLI&lt;/strong&gt;, with a GUI when you want to think in screens instead of prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP + CLI matter
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; is the difference between “my data lives in an app” and “my data is a &lt;strong&gt;capability&lt;/strong&gt; my editor and agents can call.” If your assistant can query your workspace the same way your UI does, you stop treating AI as a separate silo and start treating it as &lt;strong&gt;another client&lt;/strong&gt; over the same source of truth. &lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;CLI&lt;/strong&gt; covers the cases where you’re not in an MCP-aware client at all: scripts, SSH-ish flows, quick captures, or “just give me context for this query” from the shell. &lt;/p&gt;

&lt;p&gt;Together, they’re how I get &lt;strong&gt;local&lt;/strong&gt; data &lt;strong&gt;onto&lt;/strong&gt; the rest of my machine without turning copy-paste into a second job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hybrid RAG (and why “semantic only” wasn’t enough)
&lt;/h2&gt;

&lt;p&gt;Dumping large folders into Claude “works” until it doesn’t: you burn &lt;strong&gt;tokens&lt;/strong&gt;, dilute signal, and the model still might miss the one paragraph that mattered. &lt;/p&gt;

&lt;p&gt;DeepThink uses &lt;strong&gt;hybrid retrieval&lt;/strong&gt;: &lt;strong&gt;BM25-style keyword search&lt;/strong&gt; plus &lt;strong&gt;semantic&lt;/strong&gt; search (on Apple’s embedding stack via &lt;strong&gt;NLEmbedding&lt;/strong&gt;). In practice that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exact symbols, filenames, and rare terms still surface via &lt;strong&gt;lexical&lt;/strong&gt; matching&lt;/li&gt;
&lt;li&gt;Paraphrases and “I can’t remember the wording” queries still surface via &lt;strong&gt;semantic&lt;/strong&gt; matching&lt;/li&gt;
&lt;li&gt;You can ground the assistant on &lt;strong&gt;the passages you mean&lt;/strong&gt;, not the whole haystack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the same underlying idea as good RAG in production systems: &lt;strong&gt;retrieve narrow, generate broad&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude in the loop
&lt;/h2&gt;

&lt;p&gt;Conversational AI routes through Anthropic’s &lt;strong&gt;Claude CLI&lt;/strong&gt; (&lt;code&gt;claude login&lt;/code&gt;) alongside that retrieval layer. The point isn’t to replace your editor; it’s to make &lt;strong&gt;workspace-aware&lt;/strong&gt; conversations &lt;strong&gt;cheap enough&lt;/strong&gt; to use all day because you’re not re-sending the world on every turn. &lt;/p&gt;

&lt;p&gt;There’s also a &lt;code&gt;/deepthink&lt;/code&gt; command path in the workflow so common actions stay &lt;strong&gt;fast&lt;/strong&gt; once you’re set up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;You might care if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Want &lt;strong&gt;local-first&lt;/strong&gt; control over notes, tasks, and knowledge&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Claude&lt;/strong&gt; and want &lt;strong&gt;MCP&lt;/strong&gt; as the bridge into a real workspace&lt;/li&gt;
&lt;li&gt;Prefer &lt;strong&gt;native macOS&lt;/strong&gt; UI for browsing and editing, not only chat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably &lt;em&gt;don’t&lt;/em&gt; need this if you’re happy with a single SaaS silo and don’t care about &lt;strong&gt;local&lt;/strong&gt; storage or &lt;strong&gt;MCP&lt;/strong&gt; integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get DeepThink
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try:&lt;/strong&gt; &lt;a href="https://try-deepthink.vercel.app" rel="noopener noreferrer"&gt;try-deepthink.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/aagam-headout/deepthink" rel="noopener noreferrer"&gt;deepthink&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mac app:&lt;/strong&gt; &lt;a href="https://github.com/aagam-headout/deepthink/releases" rel="noopener noreferrer"&gt;v1.0.0 release&lt;/a&gt; (Full install and troubleshooting are on that release page.)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Feedback and PRs are welcome, especially on MCP, retrieval, and the CLI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>rag</category>
      <category>opensource</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
