<?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: Tiger</title>
    <description>The latest articles on DEV Community by Tiger (@tiger_contextberg).</description>
    <link>https://dev.to/tiger_contextberg</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%2F3927967%2F1134f4f1-f97f-44ae-a1c2-9828a703f37e.png</url>
      <title>DEV Community: Tiger</title>
      <link>https://dev.to/tiger_contextberg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tiger_contextberg"/>
    <language>en</language>
    <item>
      <title>Memory app bridging Claude Code/Codex/Cursor over MCP</title>
      <dc:creator>Tiger</dc:creator>
      <pubDate>Wed, 20 May 2026 07:19:38 +0000</pubDate>
      <link>https://dev.to/tiger_contextberg/memory-app-bridging-claude-codecodexcursor-over-mcp-2557</link>
      <guid>https://dev.to/tiger_contextberg/memory-app-bridging-claude-codecodexcursor-over-mcp-2557</guid>
      <description>&lt;p&gt;I'm Tiger, an indie developer who just shipped &lt;strong&gt;Contextberg&lt;/strong&gt; — a Windows-native memory app for AI agents — and I wanted to share the design notes behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Contextberg?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;local memory app for AI agents on Windows&lt;/strong&gt;, distributed on the Microsoft Store.&lt;/p&gt;

&lt;p&gt;It runs quietly in the background and records &lt;strong&gt;5 signals&lt;/strong&gt; from your PC — screenshots, browser history, keystrokes, app/window usage, and agent conversation history — then serves the distilled memory back to any &lt;strong&gt;MCP-compatible agent&lt;/strong&gt; (Claude Code, Codex, Cursor, GitHub Copilot, OpenClaw, LM Studio).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP server built in&lt;/strong&gt; — one-click connect to Claude Desktop / Cursor / etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 kinds of memory&lt;/strong&gt; auto-generated: 15-min Activity, hourly Report, daily LTM&lt;/li&gt;
&lt;li&gt;Raw data stays &lt;strong&gt;local&lt;/strong&gt;; cloud AI processing is zero-retention&lt;/li&gt;
&lt;li&gt;~250MB active / &amp;lt;1% idle CPU — light enough for a corporate laptop&lt;/li&gt;
&lt;li&gt;Free tier from day one&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Close your laptop Friday mid-debug. Open Contextberg Monday. Your agent already knows where you left off.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;These days, my development style revolves around &lt;strong&gt;using multiple AI agents in parallel&lt;/strong&gt; — Claude Code for design discussions, Codex for review and diff verification, Cursor for assisted editing, GitHub Copilot in the terminal.&lt;/p&gt;

&lt;p&gt;The problem: &lt;strong&gt;none of these agents see each other's conversations.&lt;/strong&gt; And on top of that, most of my decision-making happens &lt;em&gt;before&lt;/em&gt; I even open an agent — reading Stack Overflow, browsing GitHub Issues, scribbling notes in another app. By the time I land in a chat, only the last mile of thinking is captured.&lt;/p&gt;

&lt;p&gt;So every session starts with me re-explaining myself.&lt;/p&gt;

&lt;p&gt;Concrete examples that piled up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monday night, I spent 30 minutes reading Stack Overflow and a GitHub issue, decided on an approach.
→ &lt;strong&gt;No agent ever saw this&lt;/strong&gt; (I didn't open one)&lt;/li&gt;
&lt;li&gt;Tuesday morning, I open Claude Code to continue.
→ It has no idea what I read Monday, or what I decided in another agent. Starts from zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To make "pick up from Friday" &lt;em&gt;actually work&lt;/em&gt;, I need a place that records the &lt;strong&gt;whole working context&lt;/strong&gt; — what was on my screen, what I read in the browser, what app I was in, what each agent and I talked about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why existing tools didn't quite get there
&lt;/h3&gt;

&lt;p&gt;I tried a bunch of similar tools. None of them fully clicked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-source ones require local builds.&lt;/strong&gt; Setting up a .NET/Node toolchain just to try a memory tool is a non-starter for anyone outside hardcore developers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"No setup" usually means paid SaaS.&lt;/strong&gt; Useful, but you hit a paywall before you've experienced the value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They run heavy in the background.&lt;/strong&gt; Many residents idle at 500MB–1GB. On a corporate laptop, that's a deal-breaker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not designed AI-native.&lt;/strong&gt; They look like chat history viewers, not something built to feed agents as &lt;em&gt;context&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No MCP / no export path.&lt;/strong&gt; Even if memory accumulates, the only way to use it is the app's own chat. Nothing flows outward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS-only.&lt;/strong&gt; The kicker. Windows developers get left out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To reach &lt;strong&gt;non-developers too&lt;/strong&gt; with a "give your agent memory" tool, I needed something &lt;strong&gt;install-free, sign-up-only, lightweight enough to coexist with other tools, and built around MCP from day one&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Four pillars&lt;/li&gt;
&lt;li&gt;Try it in 5 minutes&lt;/li&gt;
&lt;li&gt;What gets recorded — 5 signals&lt;/li&gt;
&lt;li&gt;The Record tab and the Memory tab&lt;/li&gt;
&lt;li&gt;Three kinds of memory — used for different purposes&lt;/li&gt;
&lt;li&gt;Privacy design — nothing is retained on the cloud side&lt;/li&gt;
&lt;li&gt;Performance — why Windows-native&lt;/li&gt;
&lt;li&gt;Wiring it to agents via MCP&lt;/li&gt;
&lt;li&gt;Plans — Free vs Lite&lt;/li&gt;
&lt;li&gt;Who this is for&lt;/li&gt;
&lt;li&gt;Roadmap&lt;/li&gt;
&lt;li&gt;Closing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Four pillars
&lt;/h2&gt;

&lt;h3&gt;
  
  
  01 · Context — Stop re-typing what you already did
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sends per-window screenshots to your agent &lt;strong&gt;directly via MCP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Auto-imports browsing history (Chrome / Edge &lt;code&gt;History&lt;/code&gt; SQLite → URL &amp;amp; title)&lt;/li&gt;
&lt;li&gt;Pulls in &lt;strong&gt;conversation history&lt;/strong&gt; from Claude Code / Codex / Cursor / Terminal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in MCP server&lt;/strong&gt; — connect a compatible agent with one click&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2F0r6nc3vu10n8detmm0v8.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.amazonaws.com%2Fuploads%2Farticles%2F0r6nc3vu10n8detmm0v8.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  02 · Memory — Your work becomes memory
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Short-term memory&lt;/strong&gt; (Hourly Report): auto-summarized by hour and activity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-term memory&lt;/strong&gt; (LTM): habits, tools, ongoing projects, working patterns&lt;/li&gt;
&lt;li&gt;All auto-generated. Your agent can reason over it any time.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fp7e8mkcjhchc4257h0zl.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.amazonaws.com%2Fuploads%2Farticles%2Fp7e8mkcjhchc4257h0zl.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  03 · Private — Your work data doesn't leave your PC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Activity, screenshots, and browsing history are &lt;strong&gt;stored locally&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;AI processing uses cloud models by default (Google Gemini via a BFF that holds the API key)&lt;/li&gt;
&lt;li&gt;Switch to &lt;strong&gt;LM Studio&lt;/strong&gt; for fully offline operation&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fn2la0yl8q0g9jz0d9ltd.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.amazonaws.com%2Fuploads%2Farticles%2Fn2la0yl8q0g9jz0d9ltd.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  04 · Remember — Resume where you left off
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The moment you come back, Contextberg surfaces a summary of what you were doing&lt;/li&gt;
&lt;li&gt;Activity, browsing, and agent history reconstructed across sources&lt;/li&gt;
&lt;li&gt;Dive deeper on anything via the in-app chat&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Forbbkx31wbcrqu28k7qv.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.amazonaws.com%2Fuploads%2Farticles%2Forbbkx31wbcrqu28k7qv.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it in 5 minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Search "Contextberg" in the Microsoft Store, or open
   https://apps.microsoft.com/detail/9nhpvl6s5dw9
2. Launch → sign in with Google (free plan is fine)
3. Use your PC normally for a few minutes (activity accrues in the background)
4. Open the Memory tab → an Hourly Report should appear within the hour
5. Settings → MCP → click "Connect Claude Desktop"
   (Auto-appends a block to your Claude Desktop config)
6. Restart Claude Desktop and ask:
   "What did I work on yesterday?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What gets recorded — 5 signals
&lt;/h2&gt;

&lt;p&gt;The starting point of Contextberg's design was a simple judgment: &lt;strong&gt;agent conversation history alone is not enough memory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tools that import agent conversation logs already exist. But most decision-making happens &lt;em&gt;before&lt;/em&gt; you reach the chat box. Reading Stack Overflow, skimming GitHub Issues, staring at a file in VS Code for 30 minutes and not touching it — none of that lands in a conversation log. Only the final move, after the decision is already made, gets saved.&lt;/p&gt;

&lt;p&gt;So Contextberg records 5 signals to capture &lt;strong&gt;everything happening on your PC&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;What's recorded&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App / window usage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Foreground process name, window title, dwell time&lt;/td&gt;
&lt;td&gt;Reconstruct "1 hour in VS Code on auth code"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser history&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;URL / title / last-visited from Chrome &amp;amp; Edge &lt;code&gt;History&lt;/code&gt; SQLite&lt;/td&gt;
&lt;td&gt;Reconstruct "I read that Stack Overflow thread"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screenshots&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Active-window capture (PNG)&lt;/td&gt;
&lt;td&gt;Let humans and AI re-read what was on screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Keystrokes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Per-app keystroke log&lt;/td&gt;
&lt;td&gt;"What were you typing?" "Where did you get stuck?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent conversation history&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conversation turns from Claude Code / Codex / Cursor / Terminal&lt;/td&gt;
&lt;td&gt;Reconstruct cross-agent dialogue&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key is &lt;strong&gt;combining all 5 into a single timeline&lt;/strong&gt;. Conversation history alone tells you &lt;em&gt;what was decided&lt;/em&gt;. Add browser, screen, keystrokes, and app usage, and the agent can infer &lt;strong&gt;why&lt;/strong&gt; that decision was made.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You're recording all that? What about privacy?" — fair question. Everything stays on your PC, only summarized prompts go to the cloud (and if you switch to LM Studio, even those stay local). See the privacy section below.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Record tab and the Memory tab
&lt;/h2&gt;

&lt;p&gt;Recording silently in the background and pushing through MCP isn't enough. Users need to &lt;strong&gt;see what's being captured&lt;/strong&gt; to trust it. Contextberg has two tabs for this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Record tab — live activity log
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Foreground app switches stream in real-time&lt;/li&gt;
&lt;li&gt;Recent screenshots appear as thumbnails&lt;/li&gt;
&lt;li&gt;Browser history shows up as it's imported&lt;/li&gt;
&lt;li&gt;Daily usage pie chart and stack bar&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fqwdxxlshxpmz36omlezn.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.amazonaws.com%2Fuploads%2Farticles%2Fqwdxxlshxpmz36omlezn.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This turns "I'm being watched" anxiety into "I can see exactly what was recorded" trust. It also works as a personal review tool — what happened while I was away, where the morning went, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory tab — short-term + long-term memory view
&lt;/h3&gt;

&lt;p&gt;The tab where you read your own accumulated memory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LTM is &lt;strong&gt;editable by hand&lt;/strong&gt; — delete things the AI got wrong, add things like "I prefer X" manually&lt;/li&gt;
&lt;li&gt;Each Hourly Report links into the in-app Chat for deep-dives ("walk me through this decision")&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fo0fvbbd7vdjk7nxvv3ko.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.amazonaws.com%2Fuploads%2Farticles%2Fo0fvbbd7vdjk7nxvv3ko.png" alt=" " width="800" height="450"&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fo2zlxnot56aciab275bx.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.amazonaws.com%2Fuploads%2Farticles%2Fo2zlxnot56aciab275bx.png" alt=" " width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Three kinds of memory — used for different purposes
&lt;/h2&gt;

&lt;p&gt;Contextberg keeps &lt;strong&gt;three kinds of memory&lt;/strong&gt; with different update cadences and use cases. It's not a linear "compress lower layers into upper" pipeline — they're parallel memory types optimized for different access patterns.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;th&gt;Update frequency&lt;/th&gt;
&lt;th&gt;Primary use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Activity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every 15 min&lt;/td&gt;
&lt;td&gt;"What was I just doing in the last session?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hourly Report&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every hour&lt;/td&gt;
&lt;td&gt;Daily review, "what did I do this morning?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Long-Term Memory (LTM)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every day&lt;/td&gt;
&lt;td&gt;Persistent facts (role, preferences, ongoing projects) injected into agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How memory is generated
&lt;/h3&gt;

&lt;p&gt;Each memory layer is generated by feeding &lt;strong&gt;per-app-use screenshots + keystrokes + agent conversations + browsing history&lt;/strong&gt; as a single bundle to an LLM. Raw signals go in, the model writes the summary out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;[14:00-14:18] VS Code (Contextberg.sln)
&lt;span class="p"&gt;  -&lt;/span&gt; Editing Views/MemoryView.xaml.cs
&lt;span class="p"&gt;  -&lt;/span&gt; 4 screenshots (referenced by path)
&lt;span class="p"&gt;  -&lt;/span&gt; Keystroke excerpt: "Migrate" "Async" "await ctx.Database..."
[14:18-14:35] Edge
&lt;span class="p"&gt;  -&lt;/span&gt; GitHub: contextberg/contextberg#42
&lt;span class="p"&gt;  -&lt;/span&gt; Stack Overflow: "EF Core MigrateAsync vs EnsureCreated"
[14:35-15:00] Claude Code (session abc123)
&lt;span class="p"&gt;  -&lt;/span&gt; Decided "replace with MigrateAsync" → edited AppDbContext.cs
[14:58] git commit "fix(db): use MigrateAsync"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With browser, screen, and keystroke context around the conversation, the agent can infer &lt;strong&gt;why the implementation ended up this way&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Activity / Hourly Report / LTM in a sentence each
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity (15 min)&lt;/strong&gt;: recent signals, near-raw. For "what was I just doing?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hourly Report (1 hour)&lt;/strong&gt;: 1-hour Activity rolled up into natural-language summary. The main surface for daily/weekly review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LTM (1 day)&lt;/strong&gt;: distilled from a day's Hourly Reports — only the things that should persist (role, preferences, active projects). Functions as agent pre-injection context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  One implementation gotcha — LTM section name matching
&lt;/h3&gt;

&lt;p&gt;LTM is structured as Markdown sections like &lt;code&gt;# Active Projects&lt;/code&gt;. Ask an LLM to "append to Active Projects" and it'll happily invent &lt;code&gt;## Current Projects&lt;/code&gt; instead. Without intervention, the same concept ends up split across 3–4 sections. The fix: a normalization dictionary in &lt;code&gt;MemoryUpdatePipelineService&lt;/code&gt; that runs before the merge.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy design — nothing is retained on the cloud side
&lt;/h2&gt;

&lt;p&gt;Contextberg captures &lt;strong&gt;screen, browser, keystrokes, app usage, and conversations&lt;/strong&gt; broadly. Narrowing the input would degrade the "memory" feature directly, so I chose not to.&lt;/p&gt;

&lt;p&gt;Honestly: &lt;strong&gt;at the scale of an individual developer, local-side privacy has limits.&lt;/strong&gt; No matter how clever the OS hooks and SQLite handling, perfectly auto-filtering "only the dangerous stuff" is beyond what I can guarantee.&lt;/p&gt;

&lt;p&gt;So the line I draw is different: &lt;strong&gt;record broadly on the device, but retain nothing on the cloud side.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft Store certification
&lt;/h3&gt;

&lt;p&gt;The Microsoft Store reviews apps that capture screen content and keyboard input more strictly than other categories. Data handling, encryption, and third-party transmission must all be declared and reviewed. Contextberg has passed this review. The &lt;strong&gt;Privacy Statement and support contact&lt;/strong&gt; on the Store page act as your first line of accountability.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's stored locally
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screenshot image files&lt;/strong&gt; (&lt;code&gt;%LOCALAPPDATA%\Contextberg\screenshots\&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keystroke logs&lt;/strong&gt; (per-app, in SQLite, with content)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser history cache&lt;/strong&gt; (URL / title / last visit from Chrome &amp;amp; Edge &lt;code&gt;History&lt;/code&gt; SQLite)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App usage log&lt;/strong&gt; (process name / window title / dwell time)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Imported copies of agent conversation history&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth tokens&lt;/strong&gt; (DPAPI-encrypted via &lt;code&gt;ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser)&lt;/code&gt; — only decryptable by the signed-in Windows user)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Browser &lt;strong&gt;form input, cookies, and tab body content&lt;/strong&gt; are explicitly &lt;em&gt;not&lt;/em&gt; read.&lt;/p&gt;

&lt;h3&gt;
  
  
  What gets sent to the cloud
&lt;/h3&gt;

&lt;p&gt;For AI generation (Hourly Report / LTM), Contextberg sends a &lt;strong&gt;formatted prompt&lt;/strong&gt; built from the local records above. That prompt includes &lt;strong&gt;screenshot images, keystroke log contents, browsing history, app usage, and conversation history&lt;/strong&gt; (Gemini is multimodal, so screenshots ride along as images).&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;nothing on the cloud side persists&lt;/strong&gt;. Requests are processed statelessly through a BFF Lambda to Vertex AI Gemini, with the generated text flowing right back to the client and into local storage. No long-lived storage of any of the input.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This is the core of the current privacy design.&lt;/strong&gt; Record broadly on the device; retain nothing where the data lands. Not perfect, but the most honest line I could draw at solo-dev scale.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Excluding what you don't want recorded
&lt;/h3&gt;

&lt;p&gt;For information you don't want recorded (or sent to the LLM), Settings supports &lt;strong&gt;exclusion at multiple granularities&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-app exclusion&lt;/strong&gt; — password managers, banking apps, certain messaging apps pause Record while they're focused&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Window title / URL pattern exclusion&lt;/strong&gt; — &lt;code&gt;*.bank.*&lt;/code&gt; window titles, specific domains&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-of-day exclusion&lt;/strong&gt; — off-hours, specific time windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-signal toggles&lt;/strong&gt; — screenshots off only, keystrokes off only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record pause button&lt;/strong&gt; — immediate stop, one click to resume&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anything excluded &lt;strong&gt;never enters the Activity layer&lt;/strong&gt;, so it never leaks into Hourly Reports, LTM, or MCP responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto-exclusion is on the roadmap
&lt;/h3&gt;

&lt;p&gt;Current exclusions require &lt;strong&gt;you to configure them upfront&lt;/strong&gt;. If you handle a secret in an app you didn't pre-configure, it gets recorded. Future work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-detect password managers / banking apps and pause Record automatically&lt;/li&gt;
&lt;li&gt;PII detection and masking on screenshot text&lt;/li&gt;
&lt;li&gt;Stronger "now recording" notification banner&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fully local operation is an option
&lt;/h3&gt;

&lt;p&gt;If you'd rather avoid the cloud entirely, &lt;strong&gt;switch to LM Studio&lt;/strong&gt; — Hourly Report and LTM generation run on a local LLM via the OpenAI-compatible endpoint you point Settings at. Zero outbound traffic. Designed from day one for corporate laptops where cloud egress isn't acceptable.&lt;/p&gt;

&lt;h3&gt;
  
  
  See it, delete it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Record tab shows &lt;strong&gt;every recorded item one by one&lt;/strong&gt;, visually&lt;/li&gt;
&lt;li&gt;Right-click any record to &lt;strong&gt;delete it on the spot&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Settings has &lt;strong&gt;ZIP export&lt;/strong&gt; and &lt;strong&gt;delete-all&lt;/strong&gt; any time&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Performance — why Windows-native
&lt;/h2&gt;

&lt;p&gt;When you hear "always-on capture of screen, browser, and keystrokes", the next question is memory and CPU. Measured numbers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Idle memory&lt;/td&gt;
&lt;td&gt;120–180 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active memory&lt;/td&gt;
&lt;td&gt;~250 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Idle CPU&lt;/td&gt;
&lt;td&gt;&amp;lt; 1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MSIX size&lt;/td&gt;
&lt;td&gt;~100 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The design line is &lt;strong&gt;keep memory, CPU, and install size small.&lt;/strong&gt; As an always-on app, anything heavier turns Contextberg into "that thing eating RAM next to Slack and Chrome" and users quietly uninstall.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why WPF instead of Electron / Tauri
&lt;/h3&gt;

&lt;p&gt;I chose to give up cross-platform from the very first design pass. Three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Electron residents commonly hit 300–500MB just from boot.&lt;/strong&gt; With a Chromium process in tow, the &amp;lt; 200MB line isn't realistic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heavy Win32 API direct access is needed.&lt;/strong&gt; Keyboard hooks, foreground window process identification, screen capture, DPAPI, MSIX package identity — each is 1–3 lines in .NET; in Tauri / Electron you'd be wrapping FFI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MS Store distribution was the plan.&lt;/strong&gt; WPF + .NET 8 + Windows App SDK is the smoothest path to a clean MSIX.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The trade-off is that macOS / Linux versions need a separate codebase, which is on the roadmap. My bet: &lt;strong&gt;"a 250MB Windows-only app" beats "a 400MB cross-platform app"&lt;/strong&gt; for the initial user base.&lt;/p&gt;

&lt;h3&gt;
  
  
  I want this on corporate PCs eventually
&lt;/h3&gt;

&lt;p&gt;Long-term, I want Contextberg on &lt;strong&gt;company-issued laptops&lt;/strong&gt;. The developers who'd benefit most from agent memory often &lt;em&gt;do&lt;/em&gt; their main work on corporate hardware.&lt;/p&gt;

&lt;p&gt;But corporate PCs are usually &lt;strong&gt;8GB or 16GB of RAM&lt;/strong&gt;. With Slack, Teams, Edge, VS Code, and Docker Desktop running, a 500MB resident is fatal. I see colleagues at work suffering on near-frozen laptops that can barely show a Slack notification (no joke).&lt;/p&gt;

&lt;p&gt;"Doesn't get in the way of other tools" is an &lt;strong&gt;absolute requirement&lt;/strong&gt; for any path to enterprise. The line stays at &amp;lt; 300MB.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wiring it to agents via MCP
&lt;/h2&gt;

&lt;p&gt;Contextberg runs a local HTTP server (&lt;code&gt;http://127.0.0.1:18080&lt;/code&gt;) inside its WPF process, fronted by a thin MCP proxy. Drop this one block into any MCP client config (the "Connect Claude Desktop" button writes it for you):&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;"contextberg"&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;"@contextberg/mcp-server"&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;Tools exposed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_activity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recent N hours of Activity (apps, window titles, screenshots, browser history)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_daily_memory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Daily report for a given date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_weekly_memory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Weekly report for a given week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_agent_history&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cross-agent conversation turns from Claude Code / Cursor / Codex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_ltm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full LTM as Markdown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;update_ltm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Append diff to an LTM section&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What it looks like in practice
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You (in Claude Desktop):
  "The auth refactor I was doing Friday — how far did I get?"

Claude Desktop (behind the scenes):
  get_agent_history({ query: "auth refactor", since: "2026-05-08" })

Claude Desktop (to you):
  "On Friday at 5:30pm you finished moving AccessTokenStore to DPAPI.
   Two failing tests remain. Right before that you were reading a
   Stack Overflow thread about `ProtectedData.Protect` thread-safety,
   and it looks like that's the direction you took.
   You were running tests in both Codex and Claude Code in parallel.
   The failing tests are test_token_refresh_idempotent and
   test_logout_clears_pkce_state. Which one first?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Stack Overflow reading is &lt;strong&gt;nowhere in conversation history&lt;/strong&gt; — but Contextberg saw it via browser history and the Hourly Report, and the agent now sees it too. That's the win over "conversation-history-only" tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Plans — Free vs Lite
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Includes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All core features — capture, MCP, local LLM (LM Studio), 3-tier memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud Gemini quota expansion, premium models, longer retention&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Free covers MCP, 3-tier memory, and fully-local LM Studio operation.&lt;/strong&gt; This is intentional: putting "give your agent memory" behind a paywall locks out solo developers and students — the very people who benefit most. Lite is for users who want generous cloud AI quota, premium models, and longer retention; users running MCP + local LLM customization. The boundary is drawn so people can feel the value on Free first.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developers who use Claude Code / Codex / Cursor / GitHub Copilot daily&lt;/strong&gt; — the more agents you juggle, the more painful the memory fragmentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone tired of re-explaining "where I left off"&lt;/strong&gt; — the morning 15 minutes you lose unconditionally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;People who want to resume work quickly&lt;/strong&gt; — collapse the seams between sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;People who want AI benefits without sending data to the cloud&lt;/strong&gt; — LM Studio fully-local operation is designed for corporate-laptop scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If recording screen, browser history, or keystrokes — even locally — bothers you in principle, this isn't for you. The signal width is intentionally broad.&lt;/p&gt;




&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;macOS / Linux support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hermes model integration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-generation of skill commands&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills management view&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Got ideas? Drop them in the comments — your feedback shapes what we build next.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;Contextberg's goal: &lt;strong&gt;let Claude Code × Codex (and friends) work across multiple agents without you having to re-explain yourself every session.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agent conversation history alone wasn't enough, so I wrapped it together with screen, browser, keystroke, and app usage data — as a Windows-native local memory app. And I packaged it so non-developers can use it too: &lt;strong&gt;no build, sign-up only, distributed on the Microsoft Store.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You just use your PC; 3 kinds of memory accumulate in the background&lt;/li&gt;
&lt;li&gt;The pre-conversation research, browsing, fiddling, and typing is all captured&lt;/li&gt;
&lt;li&gt;Open any agent and your past self is loaded via MCP automatically&lt;/li&gt;
&lt;li&gt;Active memory ~250MB, idle CPU &amp;lt; 1%, free tier from day one&lt;/li&gt;
&lt;li&gt;LM Studio fully-local operation available&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verified with &lt;strong&gt;Claude Code / Codex / Cursor / GitHub Copilot / OpenClaw / LM Studio&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Product Hunt: &lt;strong&gt;&lt;a href="https://www.producthunt.com/products/contextberg" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/contextberg&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoft Store: &lt;strong&gt;&lt;a href="https://apps.microsoft.com/detail/9nhpvl6s5dw9" rel="noopener noreferrer"&gt;https://apps.microsoft.com/detail/9nhpvl6s5dw9&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Website: &lt;a href="https://contextberg.com" rel="noopener noreferrer"&gt;https://contextberg.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions, criticism, ideas — leave them in the comments or ping me on X (&lt;a href="https://x.com/screenest_ai" rel="noopener noreferrer"&gt;@screenest_ai&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>claude</category>
      <category>mcp</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
