<?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: geco</title>
    <description>The latest articles on DEV Community by geco (@gecojs).</description>
    <link>https://dev.to/gecojs</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%2F3933476%2Fd2919cbc-3d1d-4b05-b6a8-5232c843c515.png</url>
      <title>DEV Community: geco</title>
      <link>https://dev.to/gecojs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gecojs"/>
    <language>en</language>
    <item>
      <title>Give Your AI Persistent Memory: OpenCode + MemPalace in 10 Minute</title>
      <dc:creator>geco</dc:creator>
      <pubDate>Fri, 15 May 2026 15:34:17 +0000</pubDate>
      <link>https://dev.to/gecojs/give-your-ai-persistent-memory-opencode-mempalace-in-10-minute-dl7</link>
      <guid>https://dev.to/gecojs/give-your-ai-persistent-memory-opencode-mempalace-in-10-minute-dl7</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Every OpenCode session starts from scratch. Your AI doesn't remember past conversations, decisions, or solved problems. You repeat context over and over.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;opencode-mempalace-persistence&lt;/strong&gt; is a pure TypeScript plugin that auto-saves every conversation to MemPalace — a local vector database with 96.6% recall on LongMemEval. No cron, no cloud, no API keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;The plugin uses two OpenCode hooks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;chat.message&lt;/code&gt; — when you send a new question, the previous turn (question + answer) is saved&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;session.idle&lt;/code&gt; — catches the last turn before you close OpenCode&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each turn is categorized by wing type (developer, creative, emotions, family, consciousness) and fed to MemPalace's vector store. Knowledge Graph facts (decisions, milestones, problems, preferences) are extracted automatically.&lt;/p&gt;

&lt;p&gt;The mining runs asynchronously — state is saved immediately, and MemPalace indexing happens in the background. The UI is never blocked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install MemPalace
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;mempalace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with uv:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv tool &lt;span class="nb"&gt;install &lt;/span&gt;mempalace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure OpenCode
&lt;/h3&gt;

&lt;p&gt;Edit &lt;code&gt;~/.config/opencode/opencode.json&lt;/code&gt;:&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;"plugin"&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;"opencode-mempalace-persistence"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"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="nl"&gt;"mempalace"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&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="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mempalace-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&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="nl"&gt;"instructions"&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;"AGENTS.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~/.mempalace/identity.txt"&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;h3&gt;
  
  
  Step 3: Create AGENTS.md
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;~/.config/opencode/AGENTS.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Memory &amp;amp; Knowledge Instructions&lt;/span&gt;

Before answering, search MemPalace using MCP tools.
&lt;span class="p"&gt;
1.&lt;/span&gt; Call &lt;span class="sb"&gt;`mempalace_search`&lt;/span&gt; with the user's question as query.
&lt;span class="p"&gt;2.&lt;/span&gt; Call &lt;span class="sb"&gt;`mempalace_kg_query`&lt;/span&gt; for entity "user" and filter by keywords.
&lt;span class="p"&gt;3.&lt;/span&gt; Use relevant context in your response.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Add your identity
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;~/.mempalace/identity.txt&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I am [name], a [role]. I work with [technologies].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Restart OpenCode
&lt;/h3&gt;

&lt;p&gt;That's it. Every conversation is now automatically saved to MemPalace.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Gets Saved
&lt;/h2&gt;

&lt;p&gt;Every turn produces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;drawer&lt;/strong&gt; in MemPalace's vector database with the full conversation text&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;wing&lt;/strong&gt; assignment based on content analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Graph facts&lt;/strong&gt;: decisions, milestones, problems, preferences&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Not Cron?
&lt;/h2&gt;

&lt;p&gt;Before building this plugin, I was running a cron job to sync conversations. It was fragile, slow, and produced duplicates. The plugin approach is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time&lt;/strong&gt;: sync happens immediately after each response&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delta-only&lt;/strong&gt;: only new messages are processed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async&lt;/strong&gt;: the UI is never blocked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful shutdown&lt;/strong&gt;: session.idle catches the last turn&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/geco/opencode-mempalace-persistence" rel="noopener noreferrer"&gt;https://github.com/geco/opencode-mempalace-persistence&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;code&gt;opencode-mempalace-persistence&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MemPalace: &lt;a href="https://github.com/MemPalace/mempalace" rel="noopener noreferrer"&gt;https://github.com/MemPalace/mempalace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;awesome-opencode: &lt;a href="https://github.com/awesome-opencode/awesome-opencode/pull/357" rel="noopener noreferrer"&gt;https://github.com/awesome-opencode/awesome-opencode/pull/357&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Built with TypeScript, OpenCode Plugin SDK, and MemPalace. Published under MIT license.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opencode</category>
      <category>mempalace</category>
      <category>millajovovich</category>
    </item>
  </channel>
</rss>
