<?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: member_b47cac70</title>
    <description>The latest articles on DEV Community by member_b47cac70 (@member_b47cac70).</description>
    <link>https://dev.to/member_b47cac70</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%2F4147375%2Fddda009f-3224-4055-91dd-05a72db101ec.png</url>
      <title>DEV Community: member_b47cac70</title>
      <link>https://dev.to/member_b47cac70</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/member_b47cac70"/>
    <language>en</language>
    <item>
      <title>Hindsight Memory Made My Support Agent Stop Saying "Restart Your Router"</title>
      <dc:creator>member_b47cac70</dc:creator>
      <pubDate>Mon, 28 Sep 2026 14:30:51 +0000</pubDate>
      <link>https://dev.to/member_b47cac70/hindsight-memory-made-my-support-agent-stop-saying-restart-your-router-49c6</link>
      <guid>https://dev.to/member_b47cac70/hindsight-memory-made-my-support-agent-stop-saying-restart-your-router-49c6</guid>
      <description>&lt;p&gt;Ravi has had slow internet three times this year. The first time, switching his laptop to the 5 GHz network fixed it. The second time, it was a weak signal upstairs. The third time, a power cut had reset his router. Each time he contacted support, he got the same five steps: run a speed test, restart the router, check the cables, count your devices, move the router.&lt;/p&gt;

&lt;p&gt;He was annoyed by the second time. By the third, he was ready to switch providers.&lt;/p&gt;

&lt;p&gt;That is the problem I wanted to fix. Not "make the chatbot smarter", but something much more specific: &lt;strong&gt;a support agent should never make a customer repeat themselves.&lt;/strong&gt; So I built SupportMind, a support agent for an internet provider that remembers every customer, every fix that worked, and every promise the company made. The memory layer is &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight, an open-source agent memory system&lt;/a&gt;, and it ended up shaping the whole design.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizjllu581sr6ay5cjiib.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizjllu581sr6ay5cjiib.jpeg" alt="Same message with memory off, showing generic steps and an empty memory panel" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the system does
&lt;/h2&gt;

&lt;p&gt;SupportMind is a small Python app with three parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Streamlit chat screen.&lt;/strong&gt; On the left, a customer chats with the agent. On the right, a panel shows exactly which memories the agent recalled for that answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An LLM on Groq&lt;/strong&gt; (&lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;, with &lt;code&gt;qwen/qwen3-32b&lt;/code&gt; as a fallback) that writes the replies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hindsight&lt;/strong&gt; as the memory. Every customer message triggers a &lt;code&gt;recall()&lt;/code&gt; before the LLM sees it, and every exchange is stored with &lt;code&gt;retain()&lt;/code&gt; after.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The data is a fictional fiber provider, SwiftNet, with 15 customers across Andhra Pradesh and Telangana and 27 historical tickets: routers resetting after power cuts, duplicate OTT charges, gamers with ping spikes, a retired teacher who just wants her Sunday video call with her son to work.&lt;/p&gt;

&lt;p&gt;There is also a &lt;strong&gt;Memory switch&lt;/strong&gt; in the sidebar. With it off, the agent only sees the account basics: name, plan, router model. That is roughly what most support bots see today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core decision: two kinds of memory
&lt;/h2&gt;

&lt;p&gt;My first version had one memory bank for everything. It recalled the wrong customers' problems, and it was hard to reason about. I rewrote it around a simple split:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One bank per customer.&lt;/strong&gt; Their history, preferences, moods, and promises made to them. Nothing leaks between customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One shared playbook bank.&lt;/strong&gt; Fixes that actually worked, tagged with the router model. This is how a fix found for one customer helps the next.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In code, the whole memory layer is a small file. Recall looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;recall_customer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;What do we remember about THIS customer that is relevant to their message?&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;bank_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;customer_bank&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;_to_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the "learning" part is just two &lt;code&gt;retain()&lt;/code&gt; calls when an agent clicks &lt;strong&gt;Mark issue as resolved&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retain_resolution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;issue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;get_client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;retain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;bank_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;customer_bank&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Issue for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; was resolved. Problem: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;issue&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Fix that worked: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticket resolved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retain_async&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;get_client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;retain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;bank_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PLAYBOOK_BANK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;On router &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, the problem &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;issue&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; was fixed by: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confirmed fix&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retain_async&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fix itself is summarized from the chat by the LLM, so the human agent does not have to type anything.&lt;/p&gt;

&lt;p&gt;Notice what I am &lt;em&gt;not&lt;/em&gt; doing: I am not writing extraction logic, embedding pipelines, or deduplication. I pass Hindsight raw text like "Ravi reported slow speed after a power cut, restarting and reconnecting to 5 GHz fixed it in 5 minutes", and it extracts the facts, entities, and dates itself. That is the part I would have spent a week on otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before and after, on the same message
&lt;/h2&gt;

&lt;p&gt;Here is Ravi typing &lt;code&gt;My internet is slow again&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory off:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hello Ravi, I'm sorry you're experiencing slow speeds. Let's try a few quick checks: 1. Speed test... 2. Restart the router... 3. Check cables... 4. Device load... 5. Location...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Five generic steps. Technically correct and completely useless to someone who has already done all of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory on:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Ravi, I'm sorry you're seeing slow speeds again. This often happens when the router falls back to the 2.4 GHz band or resets its channel after a power cut. Let's try the same fix that worked before: power-cycle the TP-Link Archer C6, then connect to the 5 GHz Wi-Fi "SwiftNet_5G"... If speeds are still low, we can discuss a mesh extender for the upstairs area.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Same model, same prompt template. The only difference is what Hindsight recalled: the June 5 GHz fix, the September power-cut reset, and the August conversation about a mesh extender for his first-floor room. Ravi also prefers short instructions, so the answer is three steps instead of five.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fev0mzrq1g1n8ha9s8bl6.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fev0mzrq1g1n8ha9s8bl6.jpeg" alt="SupportMind with memory on, showing past fixes and recalled memories" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other customers show different sides of the same idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Priya&lt;/strong&gt; was double-charged in July and promised a 10% loyalty discount that never appeared. Ask "Why is my bill still wrong?" without memory and you get a generic billing FAQ. With memory, the agent apologizes for the missed discount first, because that is what she is actually angry about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lakshmi&lt;/strong&gt; is 67, not technical, and uses the internet mainly for Sunday calls with her son. With memory, the agent slows down and drops the jargon.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The part that surprised me: observations
&lt;/h2&gt;

&lt;p&gt;I expected Hindsight to give me back the facts I put in. What I did not expect was the &lt;strong&gt;observation&lt;/strong&gt; memories.&lt;/p&gt;

&lt;p&gt;After seeding Ravi's three tickets, the recall panel showed a memory I never wrote:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ravi Kumar experienced internet connectivity issues, including slow speeds and Wi-Fi drops, which caused him frustration and annoyance; on September 10, 2026, a power cut reset his router to default channel settings...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hindsight had consolidated three separate tickets into one belief about Ravi, with the dates intact. Then, after a live chat, the same observation grew a new clause: &lt;em&gt;"on September 28, 2026, he again reported slow speeds and was instructed to power-cycle his router."&lt;/em&gt; I did not write any code for that. The chat was retained with &lt;code&gt;retain_async=True&lt;/code&gt;, and a few seconds later the customer's history had updated itself.&lt;/p&gt;

&lt;p&gt;This is the difference between memory and a transcript log. A log grows forever and you have to search it. &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;Agent memory&lt;/a&gt; summarizes, merges, and keeps the timeline straight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watching it learn across customers
&lt;/h2&gt;

&lt;p&gt;The demo I care most about goes like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Karthik, on a TP-Link Archer C6, says his uploads are stuck. In chat, changing DNS to 8.8.8.8 fixes it. The agent clicks &lt;strong&gt;Mark issue as resolved&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A minute later, Ravi, on the same router model, says "My uploads are stuck."&lt;/li&gt;
&lt;li&gt;The agent suggests a firmware update (from Karthik's June ticket) and the DNS change (from the chat that just happened).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ravi never had an upload problem. The agent is using what the team learned from somebody else. That is the thing a human support team does naturally in a shared Slack channel, and what a stateless bot can never do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Split memory by who owns it.&lt;/strong&gt; Per-customer banks for personal history, a shared bank for team knowledge. It made recall far more accurate, and it gives you privacy boundaries for free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tell the model where each memory came from.&lt;/strong&gt; My first version of the prompt put customer history and playbook fixes in the same context. The result: the agent told Ravi "let's apply the fix that cleared this before" for a problem he had never had. It had confused another customer's fix with his own history. The fix was two lines in the system prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- The first list is THIS customer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s own history. The second list is from OTHER customers.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- Only say &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;last time&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; or &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;before&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; if the problem appears in this customer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s own history.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memory makes an agent more confident. That means provenance matters more, not less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Make memory visible.&lt;/strong&gt; The right-hand panel was originally a debugging aid. It turned out to be the most convincing part of the product. When the agent says "same fix as before," you can see the June 14 ticket it is referring to. Support leads trust what they can audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Store raw events, not your own summaries.&lt;/strong&gt; I retain full chat turns and ticket text, and let Hindsight extract facts and build observations. Every time I tried to pre-summarize, I threw away something that later turned out to matter, like a customer's mood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Never block the customer on a write.&lt;/strong&gt; &lt;code&gt;retain_async=True&lt;/code&gt; keeps replies fast. Recall is on the critical path; retain is not.&lt;/p&gt;

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

&lt;p&gt;The code is on GitHub:&lt;/p&gt;

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

&lt;p&gt;You need a &lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;Hindsight Cloud account or a self-hosted instance&lt;/a&gt; and a Groq key. Run &lt;code&gt;python seed_memory.py&lt;/code&gt; to load the 15 customers, then &lt;code&gt;streamlit run app.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The next thing I want to add is a Hindsight mental model per customer, a live "customer summary" a human agent can read in five seconds before picking up a call. The raw material is already in memory. It just needs to be surfaced.&lt;/p&gt;

&lt;p&gt;If you have ever had to explain your problem to support for the third time, you already know why this matters.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>python</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
