<?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: Lordmanhammer</title>
    <description>The latest articles on DEV Community by Lordmanhammer (@lordmanhammer).</description>
    <link>https://dev.to/lordmanhammer</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%2F3848264%2F7b49a4d7-7008-40da-97db-08741653e184.jpg</url>
      <title>DEV Community: Lordmanhammer</title>
      <link>https://dev.to/lordmanhammer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lordmanhammer"/>
    <language>en</language>
    <item>
      <title>My AI Assistant Had Amnesia. So I Built It a Memory System.</title>
      <dc:creator>Lordmanhammer</dc:creator>
      <pubDate>Sat, 28 Mar 2026 20:44:21 +0000</pubDate>
      <link>https://dev.to/lordmanhammer/my-ai-assistant-had-amnesia-so-i-built-it-a-memory-system-15mm</link>
      <guid>https://dev.to/lordmanhammer/my-ai-assistant-had-amnesia-so-i-built-it-a-memory-system-15mm</guid>
      <description>&lt;h1&gt;
  
  
  My AI Assistant Had Amnesia. So I Built It a Memory System.
&lt;/h1&gt;

&lt;p&gt;I manage food delivery operations in Qatar. For the past six months, I've been running an AI assistant as a genuine daily work tool — not as a toy, as actual infrastructure. Strategy sessions, briefings, team comms, competitive analysis, project tracking.&lt;/p&gt;

&lt;p&gt;It worked. Until it didn't.&lt;/p&gt;

&lt;p&gt;The problem wasn't intelligence. Claude is plenty smart. The problem was &lt;strong&gt;amnesia&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every new conversation started from zero. I'd spend the first five minutes rebuilding context — who's on my team, what we're working on, what decision we made last Tuesday, what I told it about our competitive situation last week. The AI didn't forget because it was bad at its job. It forgot because statelessness is baked into how these systems work.&lt;/p&gt;

&lt;p&gt;After months of working around this, I built a fix. It's called &lt;strong&gt;VyasaGraph&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With "Just Use a System Prompt"
&lt;/h2&gt;

&lt;p&gt;The obvious workaround is stuffing context into your system prompt. I did this for a while. It breaks down fast:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context windows are finite.&lt;/strong&gt; A detailed system prompt plus conversation history plus actual work = you hit limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System prompts are static.&lt;/strong&gt; You can't update them mid-conversation as you learn new things.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compaction kills context.&lt;/strong&gt; When Claude (or any LLM) compresses its context window, important mid-session decisions vanish.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What I actually needed was memory that works like a human's: short-term for what's happening right now, long-term for everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture: Two Layers
&lt;/h2&gt;

&lt;p&gt;I ended up with a dual-layer system, and the distinction matters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SESSION-STATE.md    →  RAM (hot, ephemeral, survives compaction)
VyasaGraph DB       →  Hard drive (permanent, semantic, cross-session)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Layer 1: SESSION-STATE.md&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A plain markdown file the agent reads at the start of every message and writes to before responding. It holds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What we're working on right now&lt;/li&gt;
&lt;li&gt;Decisions made this session
&lt;/li&gt;
&lt;li&gt;Pending actions&lt;/li&gt;
&lt;li&gt;Anything that needs to survive a context reset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because it's a file (not tokens), it survives context compaction completely. When Claude resets its window, SESSION-STATE.md is still there. The agent reads it again. Continuity restored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layer 2: VyasaGraph&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An embedded SurrealDB knowledge graph with vector search. No server, no infrastructure — just a local &lt;code&gt;.db&lt;/code&gt; file. This stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People (your team, contacts, relationships)&lt;/li&gt;
&lt;li&gt;Projects and their current status&lt;/li&gt;
&lt;li&gt;Past decisions and why they were made&lt;/li&gt;
&lt;li&gt;Recurring errors and how they were resolved&lt;/li&gt;
&lt;li&gt;Anything that needs to exist across sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key capability is &lt;strong&gt;semantic search&lt;/strong&gt; — you search by meaning, not keywords. Ask for "competitive strategy" and it finds everything about Talabat, Keeta, market position, pricing decisions — even if none of those exact words appear in your query.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works in Practice
&lt;/h2&gt;

&lt;p&gt;The agent's instruction file (&lt;code&gt;MEMORY.md&lt;/code&gt; or equivalent) tells it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On every message — read &lt;code&gt;SESSION-STATE.md&lt;/code&gt; first&lt;/li&gt;
&lt;li&gt;Before responding — write any new decisions/context to &lt;code&gt;SESSION-STATE.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Search VyasaGraph for relevant entities from prior sessions&lt;/li&gt;
&lt;li&gt;When the user shares something new — write it to VyasaGraph in that same reply&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The last point is critical. Most memory implementations batch writes at session end. Sessions die unexpectedly. I made writes happen inline — if you tell the agent something, it writes to the graph before it replies. No exceptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Code
&lt;/h2&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;vyasagraph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vyasagraph/src/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&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;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;memory.db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Store a person&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createEntities&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice (Head of Engineering, reports to Bob)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;entityType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Person&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;observations&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="s1"&gt;Joined in 2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Leading the platform redesign&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Prefers async communication&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="c1"&gt;// Create a relationship&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createRelations&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice (Head of Engineering, reports to Bob)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acme Corp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;relationType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;works_at&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}]);&lt;/span&gt;

&lt;span class="c1"&gt;// Add a new fact inline during conversation&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addObservations&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;
  &lt;span class="na"&gt;entityName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice (Head of Engineering, reports to Bob)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;contents&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="s1"&gt;Just moved to Berlin — deadline for platform launch is end of Q2&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="c1"&gt;// Search by meaning — finds Alice even if you search "engineering team Berlin deadline"&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;smartSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;engineering team Berlin deadline&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&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;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Semantic search via &lt;code&gt;smartSearch()&lt;/code&gt; — it generates an embedding from your query, runs HNSW cosine similarity against stored entity embeddings, and applies name boosting so entities whose names match get surfaced first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Tracking Built In
&lt;/h2&gt;

&lt;p&gt;Because I'm using this as an operational tool, v3 added a built-in task board:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createEntities&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;P01 - Platform redesign&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;entityType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Project&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;observations&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="s1"&gt;Modernise the customer-facing platform&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;High&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Work&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;nextAction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Finalise wireframes by Friday&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="c1"&gt;// Get formatted markdown task board&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;board&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;formatAsVtasks&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent's morning briefing pulls this automatically — active projects, blocked items, what needs attention today.&lt;/p&gt;




&lt;h2&gt;
  
  
  Error Tracking (Verrors)
&lt;/h2&gt;

&lt;p&gt;After six months I noticed the same technical issues recurring — timeouts, cron failures, service restarts. I added a verrors system that logs errors as graph entities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createVerror&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;subsystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cron_daily_brief&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;errorType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;timeout&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;errorMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Daily brief timed out after 30s&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Happened during heavy VyasaGraph query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;impact&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User missed morning update&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Weekly review surfaces patterns&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;unresolved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUnresolvedVerrors&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the same subsystem errors three times, you start to see patterns. Patterns lead to fixes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;Six months in, with VyasaGraph running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more context-rebuilding at session start&lt;/li&gt;
&lt;li&gt;The agent knows my team, their relationships, what projects we're running&lt;/li&gt;
&lt;li&gt;Past decisions stay retrievable — "what did we decide about the zone boundaries in March?" actually works&lt;/li&gt;
&lt;li&gt;Recurring problems get caught before they become chronic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best way I can describe it: before VyasaGraph, the AI was a smart temp who needed onboarding every morning. After VyasaGraph, it's a colleague who was actually there yesterday.&lt;/p&gt;




&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SurrealDB&lt;/strong&gt; — embedded graph + document + vector database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RocksDB&lt;/strong&gt; — storage engine (no config, works everywhere)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HNSW&lt;/strong&gt; — approximate nearest-neighbour vector index&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI text-embedding-3-small&lt;/strong&gt; — 1536-dim embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 18+&lt;/strong&gt; — ES Modules&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt;: &lt;code&gt;npm install vyasagraph&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/minopop/vyasagraph" rel="noopener noreferrer"&gt;github.com/minopop/vyasagraph&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenClaw skill&lt;/strong&gt;: &lt;a href="https://clawhub.ai/minopop/vyasagraph" rel="noopener noreferrer"&gt;clawhub.ai/minopop/vyasagraph&lt;/a&gt; (one-click install if you're on OpenClaw)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built in Qatar. MIT licensed. Feedback welcome.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you've been handling agent memory differently — I'm genuinely curious. What's your approach?&lt;/em&gt;&lt;/p&gt;




</description>
      <category>ai</category>
      <category>node</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
