<?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: kushal0685</title>
    <description>The latest articles on DEV Community by kushal0685 (@kushal0685).</description>
    <link>https://dev.to/kushal0685</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%2F4232454%2Fdf653b72-2004-4f8b-ba14-d34bbccef7d9.png</url>
      <title>DEV Community: kushal0685</title>
      <link>https://dev.to/kushal0685</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kushal0685"/>
    <language>en</language>
    <item>
      <title>Same AI, two answers: what happened when we gave our on-call agent a memory.</title>
      <dc:creator>kushal0685</dc:creator>
      <pubDate>Sat, 07 Nov 2026 18:03:59 +0000</pubDate>
      <link>https://dev.to/kushal0685/same-ai-two-answers-what-happened-when-we-gave-our-on-call-agent-a-memory-37hj</link>
      <guid>https://dev.to/kushal0685/same-ai-two-answers-what-happened-when-we-gave-our-on-call-agent-a-memory-37hj</guid>
      <description>&lt;p&gt;Picture the person who uses an incident tool. It's the middle of the night. An alert just woke them up. Customers are affected, a manager is asking for updates, and they are trying to read logs with half-open eyes.&lt;/p&gt;

&lt;p&gt;That person doesn't need a clever chatbot. They need an answer they can trust in seconds, and proof they can check.&lt;/p&gt;

&lt;p&gt;Our team built &lt;strong&gt;DejaVu&lt;/strong&gt;, an AI on-call agent that remembers how past outages were fixed. This post is about the design side: how we made an invisible thing, memory, visible and useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The engine underneath
&lt;/h2&gt;

&lt;p&gt;DejaVu's memory is powered by &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt;, an open-source agent memory system by Vectorize. Every past incident is stored in Hindsight. When a new error comes in, DejaVu &lt;strong&gt;recalls&lt;/strong&gt; similar incidents, an LLM (GPT-OSS 120B on Groq) reasons over them, and the engineer's feedback is &lt;strong&gt;retained&lt;/strong&gt; as a new memory.&lt;/p&gt;

&lt;p&gt;If you're curious why memory is different from just searching documents, Vectorize explains it well in &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;what is agent memory&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The challenge for design: memory works in the background. How do you show a stressed engineer &lt;em&gt;why&lt;/em&gt; the agent is so sure?&lt;/p&gt;

&lt;h2&gt;
  
  
  1. A live memory map
&lt;/h2&gt;

&lt;p&gt;The first thing you see is a map of dots. Each dot is a past incident, sized by how long it took to fix, and grouped by type of failure: cache, database, bad config, queues.&lt;/p&gt;

&lt;p&gt;When DejaVu recalls incidents for a new error, the matching dots &lt;strong&gt;light up&lt;/strong&gt; and lines draw out to them. You don't have to read anything to understand "this has happened before, many times." A failed fix shows as a red dot, and a newly learned incident appears as a green one.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Show the comparison, not just the answer
&lt;/h2&gt;

&lt;p&gt;We added a button: &lt;strong&gt;Compare without vs with memory&lt;/strong&gt;. It runs the same model twice, side by side. Without memory: 20% confident, a generic guess. With memory: 98%, with the exact fix.&lt;/p&gt;

&lt;p&gt;This turned out to be the clearest way to explain the product to anyone, technical or not. One glance, and the value of memory is obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Proof under every claim
&lt;/h2&gt;

&lt;p&gt;The confidence ring never stands alone. Under it is a sentence in plain words, like "5 of 5 matching past incidents were fixed this way," and chips for each cited incident. On the right, each recalled incident has a card: the service, what happened, how strongly it matches, how long it took to fix, and &lt;em&gt;why&lt;/em&gt; it matches.&lt;/p&gt;

&lt;p&gt;The rule we followed: &lt;strong&gt;if the agent claims it, the screen shows where it came from.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. One click to teach it
&lt;/h2&gt;

&lt;p&gt;Feedback has to be effortless at 3 a.m. So it's two big buttons: &lt;strong&gt;Fix worked&lt;/strong&gt; and &lt;strong&gt;Fix failed&lt;/strong&gt;. One click saves the outcome to Hindsight in the background, and the interface never freezes:&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="nf"&gt;learn_new_incident&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;new_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error_signature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;probable_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution_steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix_steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix_successful&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# True or False from the button
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;time_to_resolve_minutes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;minutes_since&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;diag_at&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;occurred_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;isoformat&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;Inside, this calls Hindsight's &lt;code&gt;retain&lt;/code&gt; with &lt;code&gt;retain_async=True&lt;/code&gt;. A small celebration, a toast and a new green dot confirm it worked. We also record the &lt;strong&gt;real&lt;/strong&gt; minutes from diagnosis to fix, not the AI's guess, so the learning curve stays honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Calm colours, red only for alerts
&lt;/h2&gt;

&lt;p&gt;Our first version had neon colours everywhere, and it felt stressful. We switched to a calm black and champagne-gold theme. Red is used &lt;strong&gt;only&lt;/strong&gt; for real alerts and failed fixes, so when you see red, it means something. Animations respect the "reduce motion" setting, and the layout works on a phone, because on-call engineers aren't always at a desk.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Fitting into a real team
&lt;/h2&gt;

&lt;p&gt;Good design also means fitting how teams already work. Our path to adoption:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Import history:&lt;/strong&gt; load past postmortems into Hindsight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert in:&lt;/strong&gt; a PagerDuty or Grafana webhook sends each alert to DejaVu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix plan out:&lt;/strong&gt; the cited diagnosis is posted to the team's Slack or Teams channel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close the loop:&lt;/strong&gt; each "fix worked" becomes memory, and a weekly &lt;strong&gt;reflect&lt;/strong&gt; report tells the team lead what keeps breaking.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 1 and 4 work today. The &lt;a href="https://hindsight.vectorize.io" rel="noopener noreferrer"&gt;Hindsight docs&lt;/a&gt; cover the reflect feature that powers that weekly report.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Make the invisible visible.&lt;/strong&gt; Memory is the core of the product, so we gave it a picture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proof builds trust faster than polish.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for the worst moment,&lt;/strong&gt; not the demo moment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Small details that made a big difference
&lt;/h2&gt;

&lt;p&gt;A few smaller choices helped more than we expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quick-pick alerts.&lt;/strong&gt; Three buttons replay common outages (cache error after a deploy, database out of connections, login rate limits), so anyone can try the product without typing an error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A downloadable postmortem.&lt;/strong&gt; One click writes a blameless postmortem in Markdown, because writing it is the task everyone puts off after an outage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A learning curve chart.&lt;/strong&gt; It shows time-to-fix for every incident, with the average dropping from 44 minutes to 6 as memory grew. It answers "is this actually helping?" without a single word.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friendly errors.&lt;/strong&gt; When the free AI tier is busy, the app says "wait 30 seconds" instead of showing a stack trace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are about AI. They're about respecting the person using the tool.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/Pratheeksh-7S/dejavu-incident-agent" rel="noopener noreferrer"&gt;https://github.com/Pratheeksh-7S/dejavu-incident-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo video: &lt;a href="https://youtu.be/Nu_sktguGMk" rel="noopener noreferrer"&gt;https://youtu.be/Nu_sktguGMk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hindsight: &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;https://github.com/vectorize-io/hindsight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best incident tool is the one a tired engineer can understand in five seconds.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>devops</category>
      <category>ux</category>
    </item>
    <item>
      <title>Same AI, two answers: what happened when we gave our on-call agent a memory</title>
      <dc:creator>kushal0685</dc:creator>
      <pubDate>Sat, 07 Nov 2026 17:59:05 +0000</pubDate>
      <link>https://dev.to/kushal0685/same-ai-two-answers-what-happened-when-we-gave-our-on-call-agent-a-memory-2plg</link>
      <guid>https://dev.to/kushal0685/same-ai-two-answers-what-happened-when-we-gave-our-on-call-agent-a-memory-2plg</guid>
      <description>&lt;p&gt;Picture the person who uses an incident tool. It's the middle of the night. An alert just woke them up. Customers are affected, a manager is asking for updates, and they are trying to read logs with half-open eyes.&lt;/p&gt;

&lt;p&gt;That person doesn't need a clever chatbot. They need an answer they can trust in seconds, and proof they can check.&lt;/p&gt;

&lt;p&gt;Our team built &lt;strong&gt;DejaVu&lt;/strong&gt;, an AI on-call agent that remembers how past outages were fixed. This post is about the design side: how we made an invisible thing, memory, visible and useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The engine underneath
&lt;/h2&gt;

&lt;p&gt;DejaVu's memory is powered by &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt;, an open-source agent memory system by Vectorize. Every past incident is stored in Hindsight. When a new error comes in, DejaVu &lt;strong&gt;recalls&lt;/strong&gt; similar incidents, an LLM (GPT-OSS 120B on Groq) reasons over them, and the engineer's feedback is &lt;strong&gt;retained&lt;/strong&gt; as a new memory.&lt;/p&gt;

&lt;p&gt;If you're curious why memory is different from just searching documents, Vectorize explains it well in &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;what is agent memory&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The challenge for design: memory works in the background. How do you show a stressed engineer &lt;em&gt;why&lt;/em&gt; the agent is so sure?&lt;/p&gt;

&lt;h2&gt;
  
  
  1. A live memory map
&lt;/h2&gt;

&lt;p&gt;The first thing you see is a map of dots. Each dot is a past incident, sized by how long it took to fix, and grouped by type of failure: cache, database, bad config, queues.&lt;/p&gt;

&lt;p&gt;When DejaVu recalls incidents for a new error, the matching dots &lt;strong&gt;light up&lt;/strong&gt; and lines draw out to them. You don't have to read anything to understand "this has happened before, many times." A failed fix shows as a red dot, and a newly learned incident appears as a green one.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Show the comparison, not just the answer
&lt;/h2&gt;

&lt;p&gt;We added a button: &lt;strong&gt;Compare without vs with memory&lt;/strong&gt;. It runs the same model twice, side by side. Without memory: 20% confident, a generic guess. With memory: 98%, with the exact fix.&lt;/p&gt;

&lt;p&gt;This turned out to be the clearest way to explain the product to anyone, technical or not. One glance, and the value of memory is obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Proof under every claim
&lt;/h2&gt;

&lt;p&gt;The confidence ring never stands alone. Under it is a sentence in plain words, like "5 of 5 matching past incidents were fixed this way," and chips for each cited incident. On the right, each recalled incident has a card: the service, what happened, how strongly it matches, how long it took to fix, and &lt;em&gt;why&lt;/em&gt; it matches.&lt;/p&gt;

&lt;p&gt;The rule we followed: &lt;strong&gt;if the agent claims it, the screen shows where it came from.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. One click to teach it
&lt;/h2&gt;

&lt;p&gt;Feedback has to be effortless at 3 a.m. So it's two big buttons: &lt;strong&gt;Fix worked&lt;/strong&gt; and &lt;strong&gt;Fix failed&lt;/strong&gt;. One click saves the outcome to Hindsight in the background, and the interface never freezes:&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="nf"&gt;learn_new_incident&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;new_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error_signature&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;probable_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution_steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix_steps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix_successful&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;# True or False from the button
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;time_to_resolve_minutes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;minutes_since&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;diag_at&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;occurred_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;isoformat&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;Inside, this calls Hindsight's &lt;code&gt;retain&lt;/code&gt; with &lt;code&gt;retain_async=True&lt;/code&gt;. A small celebration, a toast and a new green dot confirm it worked. We also record the &lt;strong&gt;real&lt;/strong&gt; minutes from diagnosis to fix, not the AI's guess, so the learning curve stays honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Calm colours, red only for alerts
&lt;/h2&gt;

&lt;p&gt;Our first version had neon colours everywhere, and it felt stressful. We switched to a calm black and champagne-gold theme. Red is used &lt;strong&gt;only&lt;/strong&gt; for real alerts and failed fixes, so when you see red, it means something. Animations respect the "reduce motion" setting, and the layout works on a phone, because on-call engineers aren't always at a desk.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Fitting into a real team
&lt;/h2&gt;

&lt;p&gt;Good design also means fitting how teams already work. Our path to adoption:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Import history:&lt;/strong&gt; load past postmortems into Hindsight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert in:&lt;/strong&gt; a PagerDuty or Grafana webhook sends each alert to DejaVu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix plan out:&lt;/strong&gt; the cited diagnosis is posted to the team's Slack or Teams channel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close the loop:&lt;/strong&gt; each "fix worked" becomes memory, and a weekly &lt;strong&gt;reflect&lt;/strong&gt; report tells the team lead what keeps breaking.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 1 and 4 work today. The &lt;a href="https://hindsight.vectorize.io" rel="noopener noreferrer"&gt;Hindsight docs&lt;/a&gt; cover the reflect feature that powers that weekly report.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Make the invisible visible.&lt;/strong&gt; Memory is the core of the product, so we gave it a picture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proof builds trust faster than polish.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for the worst moment,&lt;/strong&gt; not the demo moment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Small details that made a big difference
&lt;/h2&gt;

&lt;p&gt;A few smaller choices helped more than we expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quick-pick alerts.&lt;/strong&gt; Three buttons replay common outages (cache error after a deploy, database out of connections, login rate limits), so anyone can try the product without typing an error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A downloadable postmortem.&lt;/strong&gt; One click writes a blameless postmortem in Markdown, because writing it is the task everyone puts off after an outage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A learning curve chart.&lt;/strong&gt; It shows time-to-fix for every incident, with the average dropping from 44 minutes to 6 as memory grew. It answers "is this actually helping?" without a single word.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friendly errors.&lt;/strong&gt; When the free AI tier is busy, the app says "wait 30 seconds" instead of showing a stack trace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are about AI. They're about respecting the person using the tool.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/Pratheeksh-7S/dejavu-incident-agent" rel="noopener noreferrer"&gt;https://github.com/Pratheeksh-7S/dejavu-incident-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo video: &lt;a href="https://youtu.be/Nu_sktguGMk" rel="noopener noreferrer"&gt;https://youtu.be/Nu_sktguGMk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hindsight: &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;https://github.com/vectorize-io/hindsight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best incident tool is the one a tired engineer can understand in five seconds.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ux</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Retain, recall, reflect: building an incident agent's memory with Hindsight</title>
      <dc:creator>kushal0685</dc:creator>
      <pubDate>Sat, 07 Nov 2026 16:38:10 +0000</pubDate>
      <link>https://dev.to/kushal0685/retain-recall-reflect-building-an-incident-agents-memory-with-hindsight-4m4j</link>
      <guid>https://dev.to/kushal0685/retain-recall-reflect-building-an-incident-agents-memory-with-hindsight-4m4j</guid>
      <description>&lt;p&gt;Our team built &lt;strong&gt;DejaVu&lt;/strong&gt;, an AI agent that helps on-call engineers by remembering how past outages were fixed. The "remembering" part is done by &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt;, an open-source agent memory system by Vectorize.&lt;/p&gt;

&lt;p&gt;This post is a practical tour of how we used Hindsight's four main operations, with the real code, plus the small decisions that made the biggest difference.&lt;/p&gt;

&lt;p&gt;If you want the big-picture idea first, read Vectorize's explainer on &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;what agent memory is&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running Hindsight locally
&lt;/h2&gt;

&lt;p&gt;We ran the Hindsight server on our own laptops (&lt;code&gt;pip install hindsight-api&lt;/code&gt;), with Groq as its LLM provider. That made the whole stack free to run. The Python client talks to it at &lt;code&gt;http://localhost:8888&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. create_bank: give memory a purpose
&lt;/h2&gt;

&lt;p&gt;A memory bank is a separate store of memories. We made one called &lt;code&gt;dejavu-incidents&lt;/code&gt; and gave it a &lt;strong&gt;mission&lt;/strong&gt;, which tells Hindsight what is worth remembering:&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="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_bank&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dejavu-incidents&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DejaVu incident memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;mission&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Remember every production incident: the error signature, the root cause, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;the exact fix and whether it worked, so future outages are solved faster.&lt;/span&gt;&lt;span class="sh"&gt;"&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 mission sounds like a small thing, but it guides which facts Hindsight pulls out of each incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. retain: store each incident as plain English
&lt;/h2&gt;

&lt;p&gt;Every past incident goes in with &lt;code&gt;retain&lt;/code&gt;. Three details made this work well:&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="n"&gt;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dejavu-incidents&lt;/span&gt;&lt;span class="sh"&gt;"&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="nf"&gt;incident_to_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;# plain-English summary
&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;past production incident and how it was 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;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;occurred_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;             &lt;span class="c1"&gt;# when it really happened
&lt;/span&gt;    &lt;span class="n"&gt;document_id&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;incident-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# stable id
&lt;/span&gt;    &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&gt;background&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                  &lt;span class="c1"&gt;# True for live learning
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plain English beats raw JSON.&lt;/strong&gt; We turn each incident into sentences ("On payments-api, the error was... The root cause was... The fix worked."). Hindsight extracts much better facts from text a human would write.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A stable &lt;code&gt;document_id&lt;/code&gt;.&lt;/strong&gt; Running the loader twice updates incident 12 instead of creating a duplicate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata.&lt;/strong&gt; Storing &lt;code&gt;incident_id&lt;/code&gt; on every fact lets us group recalled facts back into incidents later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When an engineer clicks &lt;strong&gt;Fix worked&lt;/strong&gt; in the app, we retain the new incident with &lt;code&gt;retain_async=True&lt;/code&gt;. It's saved in the background, so the UI never freezes.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. recall: find similar incidents, even with different words
&lt;/h2&gt;

&lt;p&gt;When a new error arrives, &lt;code&gt;recall&lt;/code&gt; returns the facts most related to it. Hindsight combines several search strategies and reranks the results, so it finds matches on meaning, not just keywords. In our data, one cache bug appeared with 6 different error messages on 3 services, and recall found them all.&lt;/p&gt;

&lt;p&gt;Our key decision was how to &lt;strong&gt;rank&lt;/strong&gt;. Hindsight gives each fact several scores. We rank by the &lt;strong&gt;reranker&lt;/strong&gt; score, not recency, so an old but identical outage still comes first:&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;for&lt;/span&gt; &lt;span class="n"&gt;fact&lt;/span&gt; &lt;span class="ow"&gt;in&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;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;incident_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reranker&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reranker&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final&lt;/span&gt;
    &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setdefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;facts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]})&lt;/span&gt;
    &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;facts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our first version leaned on recency and kept missing a perfect match from months earlier. Switching to the reranker score fixed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. reflect: ask questions across all memories
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;recall&lt;/code&gt; answers "what is similar to this?". &lt;code&gt;reflect&lt;/code&gt; answers bigger questions by reasoning over the whole bank. We added a &lt;strong&gt;Lessons from memory&lt;/strong&gt; panel with three buttons for a team lead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What keeps breaking?&lt;/li&gt;
&lt;li&gt;Which fixes failed, and why?&lt;/li&gt;
&lt;li&gt;What should we fix for good?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reflect makes several LLM calls, so on Groq's free tier (about 8,000 tokens a minute) we keep it light with a low budget and token caps. If it's over the limit, the app falls back to recall plus one LLM call, and the card says which one answered. The &lt;a href="https://hindsight.vectorize.io" rel="noopener noreferrer"&gt;Hindsight docs&lt;/a&gt; cover reflect's options in detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons from building it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write memories for a reader.&lt;/strong&gt; Plain sentences produced better facts than structured dumps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep ids stable&lt;/strong&gt; so re-runs update instead of duplicating.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use metadata&lt;/strong&gt; to map facts back to your own objects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose your ranking on purpose.&lt;/strong&gt; Relevance or recency is a product decision, not a default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for rate limits.&lt;/strong&gt; Our loader waits 40 seconds between incidents, and the app has a fallback.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How the pieces fit together
&lt;/h2&gt;

&lt;p&gt;Here's the full loop for one outage, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The engineer pastes an error into the Streamlit dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;recall&lt;/code&gt; returns the most relevant facts, and we group them into the top 5 incidents.&lt;/li&gt;
&lt;li&gt;We send only those incidents to GPT-OSS 120B, with strict instructions to cite only what memory returned.&lt;/li&gt;
&lt;li&gt;The answer comes back with a root cause, fix steps and evidence. We clean the evidence and calibrate the confidence from proven fixes.&lt;/li&gt;
&lt;li&gt;The engineer clicks &lt;strong&gt;Fix worked&lt;/strong&gt; or &lt;strong&gt;Fix failed&lt;/strong&gt;, and &lt;code&gt;retain&lt;/code&gt; stores the new incident in the background.&lt;/li&gt;
&lt;li&gt;Later, &lt;code&gt;reflect&lt;/code&gt; uses everything, including that new incident, to answer the team lead's questions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every step either reads from memory or writes to it. That's why we call Hindsight the core of the project rather than a feature.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/Pratheeksh-7S/dejavu-incident-agent" rel="noopener noreferrer"&gt;https://github.com/Pratheeksh-7S/dejavu-incident-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo video: &lt;a href="https://youtu.be/Nu_sktguGMk" rel="noopener noreferrer"&gt;https://youtu.be/Nu_sktguGMk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hindsight: &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;https://github.com/vectorize-io/hindsight&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://hindsight.vectorize.io" rel="noopener noreferrer"&gt;https://hindsight.vectorize.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building any agent that should get better over time, these four calls are a great place to start.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
