<?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: glenn chen (cg33)</title>
    <description>The latest articles on DEV Community by glenn chen (cg33) (@glenn_chencg33_10528ea).</description>
    <link>https://dev.to/glenn_chencg33_10528ea</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%2F3635415%2F8b133571-602b-49fc-9fce-0fda4b25ea42.png</url>
      <title>DEV Community: glenn chen (cg33)</title>
      <link>https://dev.to/glenn_chencg33_10528ea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/glenn_chencg33_10528ea"/>
    <language>en</language>
    <item>
      <title>Your AI coding agent forgets everything outside the chat. I built OpenContext to fix that.</title>
      <dc:creator>glenn chen (cg33)</dc:creator>
      <pubDate>Sat, 30 May 2026 01:05:44 +0000</pubDate>
      <link>https://dev.to/glenn_chencg33_10528ea/your-ai-coding-agent-forgets-everything-outside-the-chat-i-built-opencontext-to-fix-that-2ofm</link>
      <guid>https://dev.to/glenn_chencg33_10528ea/your-ai-coding-agent-forgets-everything-outside-the-chat-i-built-opencontext-to-fix-that-2ofm</guid>
      <description>&lt;p&gt;Every morning, I found myself onboarding a new AI agent.&lt;/p&gt;

&lt;p&gt;Not a new human teammate.&lt;br&gt;
A new Claude Code / Codex / Cursor session.&lt;/p&gt;

&lt;p&gt;The pattern was always the same:&lt;/p&gt;

&lt;p&gt;I would open a fresh session and say something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Continue the bug I was debugging this morning.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the agent would basically ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What bug? What files? What changed? What failed? What have you already tried?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which is reasonable. The agent was not there.&lt;/p&gt;

&lt;p&gt;It did not know which shell commands I had run.&lt;br&gt;
It did not know which files I had touched.&lt;br&gt;
It did not know which build failed.&lt;br&gt;
It did not know which browser docs I had been reading.&lt;br&gt;
It did not know which previous agent session already explored and rejected a certain approach.&lt;/p&gt;

&lt;p&gt;So I had to explain my own work history again.&lt;/p&gt;

&lt;p&gt;That felt wrong.&lt;/p&gt;

&lt;p&gt;We are building increasingly capable coding agents, but most of them still only know what happens inside the current chat. The rest of your workday is invisible to them.&lt;/p&gt;

&lt;p&gt;That is the problem I built &lt;strong&gt;OpenContext&lt;/strong&gt; to explore.&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%2Fi78mda9upfleqw6w9t31.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%2Fi78mda9upfleqw6w9t31.png" alt=" " width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/ohmyctx/opencontext" rel="noopener noreferrer"&gt;https://github.com/ohmyctx/opencontext&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem: agent memory stops at the chat boundary
&lt;/h2&gt;

&lt;p&gt;Most AI coding tools are powerful inside a single session.&lt;/p&gt;

&lt;p&gt;They can read files, edit code, run commands, explain errors, and help you reason through a task.&lt;/p&gt;

&lt;p&gt;But once you start a new session, a lot of useful context disappears:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What did I work on yesterday?&lt;/li&gt;
&lt;li&gt;Which files did I edit?&lt;/li&gt;
&lt;li&gt;Which commands failed?&lt;/li&gt;
&lt;li&gt;Which tests passed?&lt;/li&gt;
&lt;li&gt;Which docs did I read?&lt;/li&gt;
&lt;li&gt;What did I already ask another agent?&lt;/li&gt;
&lt;li&gt;What did I decide not to do?&lt;/li&gt;
&lt;li&gt;What was I trying to accomplish before I got interrupted?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially painful for coding agents because software work is not just “the current prompt”.&lt;/p&gt;

&lt;p&gt;It is a stream of activity across many tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;terminal&lt;/li&gt;
&lt;li&gt;editor&lt;/li&gt;
&lt;li&gt;browser&lt;/li&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;issue trackers&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;li&gt;chat&lt;/li&gt;
&lt;li&gt;previous agent sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A fresh agent session usually sees none of that unless you manually paste it in.&lt;/p&gt;

&lt;p&gt;So every new session starts with a small onboarding tax.&lt;/p&gt;

&lt;p&gt;For small tasks, that is annoying.&lt;br&gt;
For large projects, it becomes a real bottleneck.&lt;/p&gt;
&lt;h2&gt;
  
  
  Existing memory tools mostly remember conversations
&lt;/h2&gt;

&lt;p&gt;There are already many agent memory systems.&lt;/p&gt;

&lt;p&gt;Some remember facts from previous chats.&lt;br&gt;
Some store vector embeddings.&lt;br&gt;
Some let agents write notes to themselves.&lt;br&gt;
Some act as a long-term memory backend.&lt;/p&gt;

&lt;p&gt;Those are useful, but they often start from the conversation itself.&lt;/p&gt;

&lt;p&gt;I wanted to explore a slightly different layer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if agents could remember the work signals around the conversation?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not just what you told the agent, but what you actually did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ran &lt;code&gt;go test ./...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;edited &lt;code&gt;platform/slack/slack.go&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;opened a GitHub issue&lt;/li&gt;
&lt;li&gt;searched docs about Cursor hooks&lt;/li&gt;
&lt;li&gt;started a new Codex session&lt;/li&gt;
&lt;li&gt;asked a previous Claude Code session about the same bug&lt;/li&gt;
&lt;li&gt;switched branches&lt;/li&gt;
&lt;li&gt;committed a fix&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not random logs. They are work context.&lt;/p&gt;

&lt;p&gt;And they are exactly the kind of context a new coding agent needs before it can help.&lt;/p&gt;
&lt;h2&gt;
  
  
  OpenContext: memory beyond the chat
&lt;/h2&gt;

&lt;p&gt;OpenContext is a local-first work memory layer for AI coding agents.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Collect lightweight work signals, store them locally, filter them through subscriptions and privacy rules, then compile them into agent-readable memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first interface is intentionally boring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;memory.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why Markdown?&lt;/p&gt;

&lt;p&gt;Because every coding agent can read it.&lt;/p&gt;

&lt;p&gt;Claude Code can read it.&lt;br&gt;
Codex can read it.&lt;br&gt;
Cursor can read it.&lt;br&gt;
Any local agent can read it.&lt;/p&gt;

&lt;p&gt;No special vector database required.&lt;br&gt;
No complex agent runtime required.&lt;br&gt;
No cloud service required.&lt;/p&gt;

&lt;p&gt;The current flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;collectors
  -&amp;gt; events
  -&amp;gt; local SQLite store
  -&amp;gt; subscriptions / filters
  -&amp;gt; compiled memory.md
  -&amp;gt; agent reads context before helping
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not to build another time tracker.&lt;/p&gt;

&lt;p&gt;The goal is to make this possible:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You open a blank agent session and say: “Continue what I was doing this morning.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the agent already has enough recent context to understand where to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenContext collects
&lt;/h2&gt;

&lt;p&gt;OpenContext is based on collectors.&lt;/p&gt;

&lt;p&gt;Collectors observe lightweight work signals from tools you already use.&lt;/p&gt;

&lt;p&gt;Current / planned collectors include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shell commands&lt;/li&gt;
&lt;li&gt;Claude Code hooks&lt;/li&gt;
&lt;li&gt;Codex hooks&lt;/li&gt;
&lt;li&gt;Cursor hooks&lt;/li&gt;
&lt;li&gt;OpenCode / OpenClaw / Hermes hooks&lt;/li&gt;
&lt;li&gt;browser activity&lt;/li&gt;
&lt;li&gt;macOS / Windows activity&lt;/li&gt;
&lt;li&gt;git-related context&lt;/li&gt;
&lt;li&gt;agent prompts and tool calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A shell event might look like this:&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;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/code/opencontext"&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;"go test ./..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exit_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18420&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;An agent prompt event might look like this:&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;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cursor"&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;"user_prompt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Continue the hook integration from this morning"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workspace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/code/opencontext"&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;A browser event might look like this:&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;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"browser"&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;"page_view"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://cursor.com/docs/hooks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cursor Hooks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;240000&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;Individually, these events are small.&lt;/p&gt;

&lt;p&gt;Together, they tell a story:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The user was integrating Cursor hooks, reading the Cursor hooks docs, editing the OpenContext repo, and running tests that failed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is context.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenContext does not try to do
&lt;/h2&gt;

&lt;p&gt;This boundary is important.&lt;/p&gt;

&lt;p&gt;OpenContext is not meant to copy your entire workspace.&lt;/p&gt;

&lt;p&gt;It should capture activity, not duplicate all content.&lt;/p&gt;

&lt;p&gt;For example, if you edit a file, OpenContext does not need to store the full file by default.&lt;/p&gt;

&lt;p&gt;It can store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;file path&lt;/li&gt;
&lt;li&gt;project&lt;/li&gt;
&lt;li&gt;timestamp&lt;/li&gt;
&lt;li&gt;git branch&lt;/li&gt;
&lt;li&gt;action type&lt;/li&gt;
&lt;li&gt;optional summary&lt;/li&gt;
&lt;li&gt;pointer to the original source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can read the actual file later if needed.&lt;/p&gt;

&lt;p&gt;Same with emails, docs, browser pages, or GitHub issues.&lt;/p&gt;

&lt;p&gt;OpenContext should tell the agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Something important happened here. This is where to look.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should not automatically become a giant warehouse of all your private content.&lt;/p&gt;

&lt;p&gt;A useful distinction is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;content = the thing itself
context = your interaction with the thing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A document is content.&lt;br&gt;
Opening it, editing it, sharing it, returning to it repeatedly, or leaving a comment unresolved — that is context.&lt;/p&gt;

&lt;p&gt;OpenContext focuses on the second part.&lt;/p&gt;
&lt;h2&gt;
  
  
  Privacy model
&lt;/h2&gt;

&lt;p&gt;This kind of tool can easily become creepy if designed badly.&lt;/p&gt;

&lt;p&gt;So OpenContext starts with a few constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local-first by default&lt;/li&gt;
&lt;li&gt;no screenshots by default&lt;/li&gt;
&lt;li&gt;no keyboard logging&lt;/li&gt;
&lt;li&gt;raw events stay local&lt;/li&gt;
&lt;li&gt;sensitivity levels for collected events&lt;/li&gt;
&lt;li&gt;subscriptions decide what becomes agent-readable memory&lt;/li&gt;
&lt;li&gt;users should be able to inspect what was collected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default goal is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Record everything the user does.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Capture enough work context to help agents continue where the user left off.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are very different products.&lt;/p&gt;

&lt;p&gt;OpenContext should feel like a personal memory layer, not employee monitoring software.&lt;/p&gt;
&lt;h2&gt;
  
  
  Subscriptions: not every agent needs every memory
&lt;/h2&gt;

&lt;p&gt;Another idea in OpenContext is subscriptions.&lt;/p&gt;

&lt;p&gt;Not every agent should see every event.&lt;/p&gt;

&lt;p&gt;A coding agent may need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recent shell commands&lt;/li&gt;
&lt;li&gt;touched files&lt;/li&gt;
&lt;li&gt;failed tests&lt;/li&gt;
&lt;li&gt;git branch&lt;/li&gt;
&lt;li&gt;recent coding prompts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A PM-style agent may need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;summaries&lt;/li&gt;
&lt;li&gt;open loops&lt;/li&gt;
&lt;li&gt;project progress&lt;/li&gt;
&lt;li&gt;decisions&lt;/li&gt;
&lt;li&gt;blockers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A writing agent may need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drafts&lt;/li&gt;
&lt;li&gt;browser research&lt;/li&gt;
&lt;li&gt;notes&lt;/li&gt;
&lt;li&gt;previous writing style&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of dumping all events into every agent context, OpenContext lets memory be filtered.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;raw events
  -&amp;gt; subscriptions
  -&amp;gt; scoped memory
  -&amp;gt; agent-readable context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matters because memory is not just storage.&lt;br&gt;
Memory is selection.&lt;/p&gt;

&lt;p&gt;Too little context and the agent is lost.&lt;br&gt;
Too much context and the agent is distracted.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Markdown first?
&lt;/h2&gt;

&lt;p&gt;The first version compiles memory into Markdown.&lt;/p&gt;

&lt;p&gt;That may sound primitive, but it has a few advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It is transparent.&lt;/li&gt;
&lt;li&gt;It is easy to inspect.&lt;/li&gt;
&lt;li&gt;It works with almost every coding agent.&lt;/li&gt;
&lt;li&gt;It avoids forcing users into a specific database or runtime.&lt;/li&gt;
&lt;li&gt;It is easy to version, diff, edit, and delete.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A generated memory file might contain:&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;# Recent Work Memory&lt;/span&gt;

&lt;span class="gu"&gt;## Current Project: opencontext&lt;/span&gt;

&lt;span class="gu"&gt;### Recent Activity&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Worked on Cursor hook integration.
&lt;span class="p"&gt;-&lt;/span&gt; Captured beforeSubmitPrompt events from Cursor.
&lt;span class="p"&gt;-&lt;/span&gt; Ran local tests for shell collector.
&lt;span class="p"&gt;-&lt;/span&gt; Investigated how to inject memory into fresh agent sessions.

&lt;span class="gu"&gt;### Recent Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; go test ./...
&lt;span class="p"&gt;-&lt;/span&gt; oc collector cursor install
&lt;span class="p"&gt;-&lt;/span&gt; curl http://localhost:6060/health

&lt;span class="gu"&gt;### Open Loops&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Verify Cursor sessionStart hook behavior.
&lt;span class="p"&gt;-&lt;/span&gt; Improve memory.md formatting.
&lt;span class="p"&gt;-&lt;/span&gt; Add browser collector examples.

&lt;span class="gu"&gt;### Relevant Files&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; cmd/oc
&lt;span class="p"&gt;-&lt;/span&gt; internal/collector
&lt;span class="p"&gt;-&lt;/span&gt; docs/hooks.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not the final form of memory.&lt;/p&gt;

&lt;p&gt;But it is a useful first interface.&lt;/p&gt;

&lt;p&gt;Later, OpenContext can add MCP tools, richer querying, embeddings, event graphs, or temporal memory.&lt;/p&gt;

&lt;p&gt;But Markdown gives us a simple baseline: the agent can read it today.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this differs from time tracking
&lt;/h2&gt;

&lt;p&gt;OpenContext may sound similar to time tracking tools at first.&lt;/p&gt;

&lt;p&gt;But the question is different.&lt;/p&gt;

&lt;p&gt;A time tracker asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where did my time go?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OpenContext asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What context should my agent know before it helps me?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changes the output.&lt;/p&gt;

&lt;p&gt;The main output is not a dashboard.&lt;br&gt;
It is not productivity analytics.&lt;br&gt;
It is not employee monitoring.&lt;/p&gt;

&lt;p&gt;The main output is agent-usable context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;what failed&lt;/li&gt;
&lt;li&gt;what was tried&lt;/li&gt;
&lt;li&gt;what is still open&lt;/li&gt;
&lt;li&gt;where the agent should look next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is closer to a continuity layer for coding agents.&lt;/p&gt;

&lt;p&gt;Humans work continuously.&lt;br&gt;
Agent sessions are fragmented.&lt;/p&gt;

&lt;p&gt;OpenContext tries to bridge that gap.&lt;/p&gt;
&lt;h2&gt;
  
  
  A small example
&lt;/h2&gt;

&lt;p&gt;Imagine you spent the morning debugging a Slack integration bug.&lt;/p&gt;

&lt;p&gt;During that time you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;edited &lt;code&gt;platform/slack/slack.go&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ran &lt;code&gt;go test ./...&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;opened Slack API docs in the browser&lt;/li&gt;
&lt;li&gt;asked Codex about mention parsing&lt;/li&gt;
&lt;li&gt;committed a test case&lt;/li&gt;
&lt;li&gt;left one release-test issue unresolved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later, you open a fresh agent session and type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Continue the Slack bug from this morning.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without OpenContext, the agent asks for background.&lt;/p&gt;

&lt;p&gt;With OpenContext, it can see something like:&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="gu"&gt;## Recent Work: cc-connect&lt;/span&gt;

This morning the user worked on a Slack mention parsing bug.

Evidence:
&lt;span class="p"&gt;-&lt;/span&gt; Edited &lt;span class="sb"&gt;`platform/slack/slack.go`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Ran &lt;span class="sb"&gt;`go test ./...`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Opened Slack API documentation
&lt;span class="p"&gt;-&lt;/span&gt; Added/updated mention parsing tests
&lt;span class="p"&gt;-&lt;/span&gt; Related prompt: "handle @Bot/status without a space"
&lt;span class="p"&gt;-&lt;/span&gt; Open loop: verify release-test phantom session behavior
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is enough for the agent to start in the right place.&lt;/p&gt;

&lt;p&gt;It does not need your entire life story.&lt;br&gt;
It just needs the relevant trail.&lt;/p&gt;

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

&lt;p&gt;I am interested in coding agents, local-first tools, and agent infrastructure.&lt;/p&gt;

&lt;p&gt;The more I use agents, the more I feel the bottleneck is not only model intelligence.&lt;/p&gt;

&lt;p&gt;A big bottleneck is context continuity.&lt;/p&gt;

&lt;p&gt;We keep building smarter agents, but we still ask users to manually explain what just happened in their own workflow.&lt;/p&gt;

&lt;p&gt;That feels backwards.&lt;/p&gt;

&lt;p&gt;If agents are going to become useful long-term collaborators, they need memory beyond the chat.&lt;/p&gt;

&lt;p&gt;Not unlimited surveillance.&lt;br&gt;
Not raw screen recording.&lt;br&gt;
Not a giant personal data dump.&lt;/p&gt;

&lt;p&gt;Just enough structured work context to understand what happened and where to continue.&lt;/p&gt;

&lt;p&gt;That is what OpenContext is trying to explore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;p&gt;OpenContext is early.&lt;/p&gt;

&lt;p&gt;The first version is focused on local developer workflows and coding agents.&lt;/p&gt;

&lt;p&gt;It currently includes the basic pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local event collection&lt;/li&gt;
&lt;li&gt;SQLite storage&lt;/li&gt;
&lt;li&gt;collector architecture&lt;/li&gt;
&lt;li&gt;sensitivity levels&lt;/li&gt;
&lt;li&gt;subscriptions&lt;/li&gt;
&lt;li&gt;Markdown memory output&lt;/li&gt;
&lt;li&gt;hooks for several agent tools&lt;/li&gt;
&lt;li&gt;optional browser / OS collectors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is still a lot to improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;better event schema&lt;/li&gt;
&lt;li&gt;better privacy controls&lt;/li&gt;
&lt;li&gt;better summarization&lt;/li&gt;
&lt;li&gt;better MCP integration&lt;/li&gt;
&lt;li&gt;better UI for inspecting collected events&lt;/li&gt;
&lt;li&gt;better support for Cursor / Codex / Claude Code workflows&lt;/li&gt;
&lt;li&gt;better distinction between raw events, summaries, and long-term memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the core idea already feels useful:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A new agent session should not start from zero.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;GitHub:&lt;/p&gt;

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

&lt;p&gt;If you use Claude Code, Codex, Cursor, or similar coding agents, I would love feedback.&lt;/p&gt;

&lt;p&gt;Especially on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is Markdown memory a good first interface?&lt;/li&gt;
&lt;li&gt;What work signals are actually useful?&lt;/li&gt;
&lt;li&gt;What should never be collected?&lt;/li&gt;
&lt;li&gt;How should subscriptions work?&lt;/li&gt;
&lt;li&gt;How should this differ from time trackers and memory databases?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not think this space is solved yet.&lt;/p&gt;

&lt;p&gt;But I do think “memory beyond the chat” will become a necessary layer for serious AI agent workflows.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>hermes</category>
      <category>agents</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Because the existing Mermaid diagram editors online produce unattractive charts, I created a new one.</title>
      <dc:creator>glenn chen (cg33)</dc:creator>
      <pubDate>Sat, 29 Nov 2025 01:24:02 +0000</pubDate>
      <link>https://dev.to/glenn_chencg33_10528ea/because-the-existing-mermaid-diagram-editors-online-produce-unattractive-charts-i-created-a-new-1939</link>
      <guid>https://dev.to/glenn_chencg33_10528ea/because-the-existing-mermaid-diagram-editors-online-produce-unattractive-charts-i-created-a-new-1939</guid>
      <description>&lt;p&gt;&lt;a href="https://modern-mermaid.live" rel="noopener noreferrer"&gt;https://modern-mermaid.live&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've been using Mermaid for flowcharts and diagrams for a while, but I always felt that the available online editors just produce ugly, unpolished charts. So I decided to build a new Mermaid editor from scratch. It features a modern, clean interface, multiple visual themes including hand-drawn and Studio Ghibli styles, real-time preview, and high-quality export options (PNG/JPG).&lt;/p&gt;

&lt;p&gt;I’d love to hear what the community thinks—feedback and suggestions are welcome!&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%2F3jc86cw7owxfmk26v17d.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%2F3jc86cw7owxfmk26v17d.png" alt=" " width="800" height="457"&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%2Fwa7unza634iry36i1lh7.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%2Fwa7unza634iry36i1lh7.png" alt=" " width="800" height="457"&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%2Fq3phqxftqehvs61l7vui.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%2Fq3phqxftqehvs61l7vui.png" alt=" " width="800" height="457"&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%2Fygwvpegf8n4wcr2nkvup.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%2Fygwvpegf8n4wcr2nkvup.png" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>javascript</category>
      <category>mermaid</category>
    </item>
  </channel>
</rss>
