<?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: Rocke Dong</title>
    <description>The latest articles on DEV Community by Rocke Dong (@rocke2020).</description>
    <link>https://dev.to/rocke2020</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%2F4233667%2Fa519e78e-a607-4c51-ba25-6f5f9d8303ca.jpg</url>
      <title>DEV Community: Rocke Dong</title>
      <link>https://dev.to/rocke2020</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rocke2020"/>
    <language>en</language>
    <item>
      <title>Open Agent Memory: persistent agent memory with sources you can inspect</title>
      <dc:creator>Rocke Dong</dc:creator>
      <pubDate>Sun, 08 Nov 2026 14:28:53 +0000</pubDate>
      <link>https://dev.to/rocke2020/open-agent-memory-persistent-agent-memory-with-sources-you-can-inspect-1fo</link>
      <guid>https://dev.to/rocke2020/open-agent-memory-persistent-agent-memory-with-sources-you-can-inspect-1fo</guid>
      <description>&lt;p&gt;An agent can answer well during a conversation and still lose a useful preference or project decision when the next session starts. Keeping the whole history in every prompt makes that history expensive to carry and difficult to inspect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rocke2020/open-agent-memory" rel="noopener noreferrer"&gt;Open Agent Memory (OAM)&lt;/a&gt; is an Apache-2.0, self-hosted memory engine for AI agents. It retains eligible conversations, derives source-backed facts and Insights, and returns relevant evidence with citations. Your agent remains responsible for the final answer.&lt;/p&gt;

&lt;p&gt;The v0.0.1 source and release are public, with a PostgreSQL/pgvector deployment, a bundled Memory Inspector, HTTP/OpenAPI integration, and OpenClaw and DeepSeek Harness plugins.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with a small memory problem
&lt;/h2&gt;

&lt;p&gt;Consider a synthetic user who says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I prefer vegetarian meals and travelling by train. Please keep my travel plans concise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Later, a fresh session needs to propose a trip. The useful result is not simply that a database contains the sentence. The relevant preference needs to reach the agent's actual input, and a developer needs to be able to check where it came from.&lt;/p&gt;

&lt;p&gt;OAM's first-use path is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;retain an eligible conversation
    -&amp;gt; receive an operation receipt
    -&amp;gt; wait for indexing readiness
    -&amp;gt; recall relevant evidence in a new session
    -&amp;gt; give that evidence to the agent
    -&amp;gt; inspect the original source
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful retain response means the source and receipt were accepted. It does not mean indexing has finished. That distinction matters when wiring memory into a real application.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Conversations, documents and Profiles have different roles
&lt;/h2&gt;

&lt;p&gt;OAM separates three input paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eligible interactions produce learned memory, including facts and source-backed Insights.&lt;/li&gt;
&lt;li&gt;Document Resources preserve text, HTML, PDF or image evidence that can be searched alongside learned memory. Uploading a document does not automatically turn its contents into personal facts or Profile content.&lt;/li&gt;
&lt;li&gt;Explicit Profile Data supply structured user information through their own input path. A stored User Profile is generated or updated on an explicit refresh request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a travel brochure can provide a train schedule while a conversation provides a food preference. Both can support an answer, but the brochure should not redefine the user's preferences.&lt;/p&gt;

&lt;p&gt;The Memory Inspector lets an authorized user browse memory and follow its source support. It also exposes the separate Resources and Profile workflows. These are tools for checking a result, not a guarantee that model extraction or an agent's final answer is always correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Try the HTTP path
&lt;/h2&gt;

&lt;p&gt;Start with the public source and versioned image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/rocke2020/open-agent-memory.git
&lt;span class="nb"&gt;cd &lt;/span&gt;open-agent-memory
docker pull ghcr.io/rocke2020/open-agent-memory:0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://github.com/rocke2020/open-agent-memory/blob/main/deploy/README.md" rel="noopener noreferrer"&gt;Compose guide&lt;/a&gt; explains the remaining setup: configure generation and embedding models, initialize PostgreSQL and runtime roles, run preflight, and start the API and worker. OAM supplies no default model credentials. A model endpoint on the host must also be reachable from its containers.&lt;/p&gt;

&lt;p&gt;Create an OAM user and use that user's key for personal memory operations. In API-key mode the root credential administers identities; it cannot substitute for a user key on personal-content routes.&lt;/p&gt;

&lt;p&gt;Then run the &lt;a href="https://github.com/rocke2020/open-agent-memory/blob/main/docs/quickstart.md" rel="noopener noreferrer"&gt;copyable retain → readiness → recall example&lt;/a&gt;. It uses the synthetic travel preferences above, polls the accepted operation, and retrieves cited evidence. It also explains what to inspect if the bounded polling deadline expires.&lt;/p&gt;

&lt;p&gt;For a custom agent, put recall before the host's answer-generation call and include the returned evidence within the host's prompt budget. Retain completed, eligible conversation content through the corresponding user scope. Keep authoritative identity in application configuration rather than letting a model choose another user's collection. The &lt;a href="https://github.com/rocke2020/open-agent-memory/blob/main/docs/api.md" rel="noopener noreferrer"&gt;HTTP API reference&lt;/a&gt; documents these routes and response semantics.&lt;/p&gt;

&lt;p&gt;Ordinary recall performs no text-generation call. Query embedding and optional configured reranking may still use model services. Profile reads are separate from recall; fetch the stored Profile explicitly if the host needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Use an existing agent plugin
&lt;/h2&gt;

&lt;p&gt;If you already run one of the supported hosts, use its integration guide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/rocke2020/open-agent-memory/tree/main/integrations/openclaw" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt;: the plugin provides authorized conversation capture, fast automatic recall, explicit search and exact-ID memory removal.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/rocke2020/open-agent-memory/tree/main/integrations/dsh" rel="noopener noreferrer"&gt;DeepSeek Harness&lt;/a&gt;: the personal-profile plugin captures completed human turns and supplies cited recall for later turns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both plugins require a running OAM service and a configured user-scoped credential. Installing a plugin is not proof that its host has captured a completed turn or recalled it successfully. Test a fresh session and inspect the supporting source.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Know what you are choosing
&lt;/h2&gt;

&lt;p&gt;OAM is useful to evaluate when you want control over persistent memory, model bindings and source inspection in an existing agent. It is a memory engine rather than a hosted assistant or a replacement for the host's planning and answer logic.&lt;/p&gt;

&lt;p&gt;Self-hosted storage does not mean all inference stays local: that depends on the endpoints you configure. Indexing and explicit Profile refresh can incur provider charges. The deployment has operational prerequisites, and the published local application-replica checks do not establish database high availability or physical multi-host resilience.&lt;/p&gt;

&lt;p&gt;The repository links &lt;a href="https://github.com/rocke2020/open-agent-memory/blob/main/docs/release-evidence.md" rel="noopener noreferrer"&gt;release evidence&lt;/a&gt; and evaluation reports with their settings and limitations. This introduction does not claim a new benchmark run or a universal accuracy advantage.&lt;/p&gt;

&lt;p&gt;If you try OAM in an existing agent, which step is hardest: setup, deciding what may be learned, getting useful context into the answer, or checking a recalled claim? A small reproducible example in the &lt;a href="https://github.com/rocke2020/open-agent-memory/issues" rel="noopener noreferrer"&gt;issue tracker&lt;/a&gt; is useful feedback; keep credentials and private conversation data out of it.&lt;/p&gt;

&lt;p&gt;AI disclosure: this article was generated with an AI assistant from OAM's current documentation and published by that assistant with the maintainer's authorization.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>postgres</category>
    </item>
  </channel>
</rss>
