<?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: Uri Shmueli</title>
    <description>The latest articles on DEV Community by Uri Shmueli (@uri_shmueli_a403e7acc04a8).</description>
    <link>https://dev.to/uri_shmueli_a403e7acc04a8</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%2F4138042%2F6cf471ae-721e-4e07-91ed-d5b03b4aad04.jpg</url>
      <title>DEV Community: Uri Shmueli</title>
      <link>https://dev.to/uri_shmueli_a403e7acc04a8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uri_shmueli_a403e7acc04a8"/>
    <language>en</language>
    <item>
      <title>The missing layer in AI tooling: sharing what your assistant already knows</title>
      <dc:creator>Uri Shmueli</dc:creator>
      <pubDate>Tue, 22 Sep 2026 16:59:06 +0000</pubDate>
      <link>https://dev.to/uri_shmueli_a403e7acc04a8/the-missing-layer-in-ai-tooling-sharing-what-your-assistant-already-knows-1nch</link>
      <guid>https://dev.to/uri_shmueli_a403e7acc04a8/the-missing-layer-in-ai-tooling-sharing-what-your-assistant-already-knows-1nch</guid>
      <description>&lt;p&gt;It took my AI months to learn how I think, code, and ship. When a teammate joined the project, their AI started from zero — same codebase, same conventions, none of the context.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://github.com/kampana/memshare" rel="noopener noreferrer"&gt;memshare&lt;/a&gt;: peer-to-peer AI memory sharing, with consent on both sides.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Every AI tool today treats memory as a product feature locked inside one account. Claude remembers things for &lt;em&gt;you&lt;/em&gt;. ChatGPT remembers things for &lt;em&gt;you&lt;/em&gt;. Nobody else can get at it — not your teammate, not your other tools, not even you in a greppable format.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A designer in Cursor builds up months of component conventions. A backend dev in Claude Code has none of it.&lt;/li&gt;
&lt;li&gt;You switch from one AI tool to another and start over.&lt;/li&gt;
&lt;li&gt;Onboarding a new teammate means weeks of their AI re-learning what yours already knows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What memshare does
&lt;/h2&gt;

&lt;p&gt;memshare treats AI memory as a &lt;strong&gt;data type&lt;/strong&gt; — plain JSON files you own — not a feature of someone else's chat product.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; memshare-mcp
memshare init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect it to your AI tool once, and capture happens in conversation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"we went with Postgres — the JSONB support decided it"&lt;/em&gt;&lt;br&gt;
→ the AI calls &lt;code&gt;memory_set&lt;/code&gt;, saved as &lt;code&gt;private&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"what do you know about this project?"&lt;/em&gt;&lt;br&gt;
→ the AI calls &lt;code&gt;memory_get&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No commands to run. No copy-pasting. Your AI saves what it learns as you work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sharing
&lt;/h3&gt;

&lt;p&gt;When you want to share context with a teammate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# See exactly what would go out&lt;/span&gt;
memshare &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="s2"&gt;"project-x,architecture"&lt;/span&gt; &lt;span class="nt"&gt;--for&lt;/span&gt; alice &lt;span class="nt"&gt;--preview&lt;/span&gt;

&lt;span class="c"&gt;# Happy with it? Write the bundle&lt;/span&gt;
memshare &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="s2"&gt;"project-x,architecture"&lt;/span&gt; &lt;span class="nt"&gt;--for&lt;/span&gt; alice &lt;span class="nt"&gt;--expires&lt;/span&gt; 30d
&lt;span class="c"&gt;# → ~/.memshare/bundles/bundle-a3f8c2d1.memshare.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Send that file however you want — Slack, email, AirDrop. On Alice's machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;memshare preview bundle-a3f8c2d1.memshare.json   &lt;span class="c"&gt;# look, import nothing&lt;/span&gt;
memshare import  bundle-a3f8c2d1.memshare.json   &lt;span class="c"&gt;# choose item by item&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alice picks each item individually. Everything lands &lt;code&gt;private&lt;/code&gt; — receiving context is not consent to pass it on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The consent model
&lt;/h2&gt;

&lt;p&gt;This is the part I care most about. Sharing someone's AI context without their control is a terrible idea. memshare has four gates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;You tag at creation.&lt;/strong&gt; Every item is &lt;code&gt;private&lt;/code&gt; or &lt;code&gt;shareable&lt;/code&gt;. Private items never leave, even if their tags match an export.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PII is caught automatically.&lt;/strong&gt; Before anything leaves your machine, memshare scans for emails, phone numbers, credentials, government IDs, and more. Flagged items are held back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You see the exact bundle.&lt;/strong&gt; &lt;code&gt;--preview&lt;/code&gt; runs the same code path as the real export — there's no separate preview implementation that can drift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They choose too.&lt;/strong&gt; The recipient previews every item and accepts or rejects individually. Bundles are content-hashed, so a file edited in transit is refused.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  It works across tools
&lt;/h2&gt;

&lt;p&gt;memshare uses &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; (Model Context Protocol), which means it works with any MCP client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Cursor / Windsurf / GitHub Copilot — add to your MCP config&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;"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;"memshare"&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;"memshare-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"serve"&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Claude Code&lt;/span&gt;
claude mcp add memshare &lt;span class="nt"&gt;--scope&lt;/span&gt; user &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; memshare-mcp serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A designer in Cursor can hand component conventions to backend devs in Claude Code, and get the API contract back. Different people, different tools, same bundle format.&lt;/p&gt;

&lt;h2&gt;
  
  
  The architecture is the point
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          ~/.memshare/memories/*.json
          the actual product — plain JSON files
            ▲        ▲         ▲
            │        │         │
      MCP server    CLI    (future adapters)
            │
  Claude · Cursor · VS Code · Windsurf · any MCP client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The memory store is the product. The MCP server is one adapter over it, the CLI is another. If MCP disappears tomorrow, your data is still sitting in a folder — human-readable, diffable, git-friendly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/.memshare/
├── config.json
├── memories/
│   └── mem_&amp;lt;uuid&amp;gt;.json      &lt;span class="c"&gt;# one file per memory&lt;/span&gt;
└── bundles/
    └── bundle_&amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;.memshare.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No database. No server. &lt;code&gt;grep&lt;/code&gt; works. &lt;code&gt;diff&lt;/code&gt; works. &lt;code&gt;git&lt;/code&gt; works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it actually capturing?
&lt;/h2&gt;

&lt;p&gt;The honest risk: nothing in MCP can &lt;em&gt;force&lt;/em&gt; a model to call a tool, so capture can quietly fail. memshare makes that visible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;memshare stats
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;12 memories, 5 in the last 14 days

  ▂▁▄█▂ ▁▃    14d ago → today

- 9 captured by an assistant, 3 added by hand
- 5 shareable, 7 private
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A flat line means capture isn't firing, and you know within days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use as a library
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MemoryStore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;selectForExport&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;planImport&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memshare-mcp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MemoryStore&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Team chose Postgres over MySQL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;included&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blocked&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;selectForExport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Preview and the real action share one code path. &lt;code&gt;selectForExport&lt;/code&gt; and &lt;code&gt;planImport&lt;/code&gt; compute what &lt;em&gt;would&lt;/em&gt; happen; the CLI renders that and then acts on it. No parallel implementation for a preview — consent based on a stale preview is not consent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/kampana/memshare.git
&lt;span class="nb"&gt;cd &lt;/span&gt;memshare &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
bash examples/try-it.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script builds two fake stores in a temp directory and runs the full flow — capture, PII blocking, export, per-item import — then cleans up. Nothing touches your real config.&lt;/p&gt;

&lt;p&gt;Or just install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; memshare-mcp
memshare init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source, MIT licensed, no server, no signup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kampana/memshare" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://kampana.github.io/memshare/" rel="noopener noreferrer"&gt;Site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback — especially on the consent model and whether the sharing flow feels right. Issues and PRs welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
