<?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: frank chu</title>
    <description>The latest articles on DEV Community by frank chu (@frankchu).</description>
    <link>https://dev.to/frankchu</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%2F4039145%2F6de64e06-6e44-4c8e-9b52-3b3a8ea185f0.png</url>
      <title>DEV Community: frank chu</title>
      <link>https://dev.to/frankchu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/frankchu"/>
    <language>en</language>
    <item>
      <title>I built an implementation of Karpathy's LLM wiki idea (MCP server, open source)</title>
      <dc:creator>frank chu</dc:creator>
      <pubDate>Tue, 21 Jul 2026 05:36:00 +0000</pubDate>
      <link>https://dev.to/frankchu/i-built-an-implementation-of-karpathys-llm-wiki-idea-mcp-server-open-source-3l3b</link>
      <guid>https://dev.to/frankchu/i-built-an-implementation-of-karpathys-llm-wiki-idea-mcp-server-open-source-3l3b</guid>
      <description>&lt;p&gt;I built an implementation of Karpathy's "LLM wiki" idea: instead of&lt;br&gt;
doing RAG over your notes at query time, the model maintains a wiki as you add sources. It's an MCP server plus a small web UI. MIT licensed, everything is markdown on your own disk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/frankchu91/mindbase" rel="noopener noreferrer"&gt;https://github.com/frankchu91/mindbase&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyusdtrl714csnkch1xwe.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyusdtrl714csnkch1xwe.png" alt="the web UI" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;When you add a source (a thought, a PDF, a URL), the model updates the relevant wiki pages and rewrites &lt;code&gt;context.md&lt;/code&gt;, a page that summarizes your current position on the topics you're tracking. When you ask a question later, the answer is mostly already written — the model reads &lt;code&gt;context.md&lt;/code&gt; and the linked pages instead of re-deriving everything from raw chunks.&lt;/p&gt;

&lt;p&gt;The data layout has three parts with different owners:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sources/       you write, the model reads. Append-only.
context.md     the model writes, you read.
README.md      per-project rules. You write, the model follows.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The append-only guarantee is enforced by tooling, not prompts. Each&lt;br&gt;
operation runs as a sub-agent with a restricted tool list — the agent that rebuilds context.md has no general file-write tool, only one MCP call that does an atomic write with a snapshot of the previous version. I started with prompt-based rules and they held most of the time, which isn't good enough for a layer that's supposed to never be rewritten.&lt;/p&gt;

&lt;p&gt;Links between pages are typed (mentions, elaborates, supersedes,&lt;br&gt;
contradicts) and stored in a sqlite index derived from the markdown. The lint command uses this to report actual conflicts, e.g.: a post you saved yesterday claims prefix caching helps long conversations most, but your notes from March say the benefit concentrates in short agentic loops. It also reports orphan pages and stale claims.&lt;/p&gt;

&lt;p&gt;There are several other implementations of this pattern in the comments of Karpathy's gist. The main things mine does differently: it runs as an MCP server so it works inside Cursor, Windsurf, Cline, Claude Desktop, and Claude Code, and it has the typed link index for contradiction detection.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Any MCP client — one entry in the config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mindbase"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mindbase-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code has a fuller version with slash commands and the&lt;br&gt;
sub-agents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add frankchu91/mindbase
/plugin install mb@mindbase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Day to day I use three commands: &lt;code&gt;/mb:contribute&lt;/code&gt; to add something,&lt;br&gt;
&lt;code&gt;/mb:build&lt;/code&gt; to regenerate context.md, &lt;code&gt;/mb:ask&lt;/code&gt; to query. The data&lt;br&gt;
folder can be opened directly as an Obsidian vault.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current limitations
&lt;/h2&gt;

&lt;p&gt;The interactive ingest flow (model summarizes the source and waits for approval before writing) only works in Claude Code. Other editors get a simpler version. The web UI is for browsing and editing, not running operations. No mobile, no sync.&lt;/p&gt;

&lt;p&gt;It's early. I'm looking for around 30 initial users and will help with setup personally. If you try it and something breaks, open an issue — I'm fixing things daily right now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/frankchu91/mindbase" rel="noopener noreferrer"&gt;https://github.com/frankchu91/mindbase&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
