<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Memora Engineering]]></title><description><![CDATA[Memora Engineering]]></description><link>https://memora-engineering.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6abbe0702e17519f94de97fd/76b6c349-7b30-4335-8779-af835238816f.png</url><title>Memora Engineering</title><link>https://memora-engineering.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 15:44:40 GMT</lastBuildDate><atom:link href="https://memora-engineering.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How We Built Infrastructure That Remembers Using Hindsight]]></title><description><![CDATA[Production incidents rarely happen at a convenient time.
Imagine it is 3:14 AM. A payment API suddenly starts timing out, latency climbs above five seconds, and an engineer on call begins investigatin]]></description><link>https://memora-engineering.hashnode.dev/how-we-built-infrastructure-that-remembers-using-hindsight</link><guid isPermaLink="true">https://memora-engineering.hashnode.dev/how-we-built-infrastructure-that-remembers-using-hindsight</guid><dc:creator><![CDATA[ALLENKI SAI RAKESH]]></dc:creator><pubDate>Tue, 29 Sep 2026 16:23:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6abbe0702e17519f94de97fd/ccdfd18f-4022-42b7-ba36-c2e59b9557f0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Production incidents rarely happen at a convenient time.</p>
<p>Imagine it is 3:14 AM. A payment API suddenly starts timing out, latency climbs above five seconds, and an engineer on call begins investigating. CPU looks suspicious, so pods are checked. Network latency is investigated. A few common fixes are considered.</p>
<p>Twenty minutes later, the team finally checks the database connection pool.</p>
<p>It is saturated at 99%.</p>
<p>The team increases the pool capacity, latency returns to normal, and the incident is resolved.</p>
<p>But there is a frustrating question:</p>
<p><strong>Hasn't this happened before?</strong></p>
<p>A previous incident had produced almost the same symptoms. The post-mortem contained the root cause, the metrics that should have been checked first, and an important warning: restarting the API could trigger a connection storm and make the situation worse.</p>
<p>The information existed.</p>
<p>The problem was that the system did not remember it when the next incident happened.</p>
<p>That is the problem we wanted to solve with <strong>Memora</strong>.</p>
<blockquote>
<p><strong>Memora — Infrastructure that remembers.</strong></p>
</blockquote>
<p>Memora is a memory-powered incident response agent that uses <strong>Hindsight</strong> to retain operational experience from resolved incidents and recall that experience when similar incidents occur.</p>
<p>Instead of treating every incident as a completely new problem, Memora allows an AI agent to learn from previous investigations, successful fixes, failed approaches, and post-incident lessons.</p>
<hr />
<h2>The Problem: Engineering Teams Keep Rediscovering the Same Knowledge</h2>
<p>Modern engineering teams have plenty of observability data.</p>
<p>They have:</p>
<ul>
<li><p>Logs</p>
</li>
<li><p>Metrics</p>
</li>
<li><p>Alerts</p>
</li>
<li><p>Incident tickets</p>
</li>
<li><p>Runbooks</p>
</li>
<li><p>Deployment history</p>
</li>
<li><p>Post-mortems</p>
</li>
<li><p>Slack or Teams discussions</p>
</li>
<li><p>Documentation</p>
</li>
</ul>
<p>But this information is usually fragmented across different systems.</p>
<p>When a new incident occurs, an engineer has to reconstruct the context manually.</p>
<p>This creates a hidden operational cost:</p>
<p><strong>Repeated rediscovery.</strong></p>
<p>A previous engineer may already have discovered the root cause. Someone may already have tested an approach that failed. A runbook may already explain the correct investigation path.</p>
<p>Yet the next incident can still begin from zero.</p>
<p>The problem is therefore not simply a lack of data.</p>
<p><strong>Engineering teams need persistent operational memory.</strong></p>
<hr />
<h1>Meet Memora</h1>
<p>Memora is an incident response agent designed around a simple idea:</p>
<blockquote>
<p><strong>Infrastructure should remember what engineers have already learned.</strong></p>
</blockquote>
<p>The workflow is straightforward:</p>
<p><strong>Incident → Investigate → Recall → Compare → Resolve → Learn</strong></p>
<p>When an incident occurs, Memora examines the current evidence and recalls relevant historical experiences from Hindsight.</p>
<p>It then compares the current situation with previous incidents rather than blindly copying an old solution.</p>
<p>Once the incident is resolved, the important operational experience is retained for future investigations.</p>
<p>This creates a learning loop:</p>
<pre><code class="language-text">                    ┌──────────────────┐
                    │  Production      │
                    │  Incident        │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Current Evidence │
                    │ Logs / Metrics   │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Memora Agent     │
                    │ Investigation    │
                    └────────┬─────────┘
                             │
                   ┌─────────┴─────────┐
                   ▼                   ▼
          ┌────────────────┐   ┌────────────────┐
          │ Current        │   │ Hindsight      │
          │ Evidence       │   │ Memory         │
          └────────┬───────┘   └───────┬────────┘
                   │                   │
                   └─────────┬─────────┘
                             ▼
                    ┌──────────────────┐
                    │ Compare &amp; Reason │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Investigation    │
                    │ &amp; Resolution     │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Retain Learning  │
                    │ in Hindsight     │
                    └──────────────────┘
</code></pre>
<hr />
<h1>The System Architecture</h1>
<p>Memora separates application state from reusable operational experience.</p>
<pre><code class="language-text">┌──────────────────────────────────────────────────────┐
│                  React + Vite UI                     │
│     Incident Workspace | Evidence | Agent | Memory  │
└─────────────────────────┬────────────────────────────┘
                          │
                       HTTP/REST
                          │
┌─────────────────────────▼────────────────────────────┐
│                 Node.js / Express API                │
├─────────────────────────┬────────────────────────────┤
│      Supabase           │       Hindsight            │
│      PostgreSQL         │       Memory Engine        │
│                         │                            │
│ • Incidents             │ • Historical experiences   │
│ • Evidence              │ • Successful approaches   │
│ • Investigation steps   │ • Failed approaches       │
│ • Runbooks              │ • Lessons learned         │
│ • Resolutions           │ • Operational context     │
└─────────────────────────┴────────────────────────────┘
</code></pre>
<h3>Supabase PostgreSQL</h3>
<p>Supabase stores the application's structured state:</p>
<ul>
<li><p>Incidents</p>
</li>
<li><p>Incident evidence</p>
</li>
<li><p>Investigation steps</p>
</li>
<li><p>Runbooks</p>
</li>
<li><p>Resolutions</p>
</li>
<li><p>Audit information</p>
</li>
</ul>
<p>It acts as the application's source of truth.</p>
<h3>Hindsight</h3>
<p>Hindsight is used for a different purpose: <strong>reusable agent experience</strong>.</p>
<p>Instead of storing the entire history of raw logs, Memora retains distilled operational knowledge that can be useful during future investigations.</p>
<p>This separation is important.</p>
<p>PostgreSQL answers:</p>
<blockquote>
<p><strong>What happened in the application?</strong></p>
</blockquote>
<p>Hindsight helps answer:</p>
<blockquote>
<p><strong>What have we learned from similar incidents before?</strong></p>
</blockquote>
<hr />
<h1>Why We Didn't Just Store Raw Logs</h1>
<p>One of the first design questions was:</p>
<p><strong>Why not simply put every incident log into a vector database and search for similar logs?</strong></p>
<p>Because raw logs are noisy.</p>
<p>A typical production log can contain:</p>
<ul>
<li><p>timestamps</p>
</li>
<li><p>container IDs</p>
</li>
<li><p>request IDs</p>
</li>
<li><p>stack traces</p>
</li>
<li><p>repeated messages</p>
</li>
<li><p>transient values</p>
</li>
<li><p>infrastructure-specific metadata</p>
</li>
</ul>
<p>Finding a similar string does not necessarily mean finding a useful operational experience.</p>
<p>An alert saying:</p>
<pre><code class="language-text">Payment API latency exceeded 5 seconds
</code></pre>
<p>does not tell an engineer:</p>
<ul>
<li><p>what caused it</p>
</li>
<li><p>which checks were performed</p>
</li>
<li><p>what failed</p>
</li>
<li><p>what worked</p>
</li>
<li><p>what should be avoided next time</p>
</li>
<li><p>what evidence confirmed the root cause</p>
</li>
</ul>
<p>Memora therefore focuses on <strong>experience rather than raw history</strong>.</p>
<hr />
<h1>What Memora Remembers</h1>
<p>After an incident is resolved, Memora extracts the useful operational knowledge into a structured experience.</p>
<p>For example:</p>
<pre><code class="language-typescript">const experienceToRetain = {
  type: "incident_experience",

  service: "payment-api",

  incident_key: "INC-1001",

  symptoms: [
    "Payment API latency",
    "Increasing timeouts"
  ],

  important_evidence: [
    "DB connections: 99%",
    "API latency: 5.2s"
  ],

  root_cause:
    "Database connection pool exhaustion",

  investigation_path: [
    "Checked CPU and ruled out throttling",
    "Inspected DB connection pool",
    "Confirmed connection exhaustion"
  ],

  failed_approaches: [
    "Restarting the API caused a cold-start connection storm"
  ],

  successful_approaches: [
    "Increased database connection pool capacity"
  ],

  runbook: "DB-CONNECTION-POOL-03",

  outcome:
    "Latency returned to normal",

  lesson:
    "When payment-api latency coincides with high DB connections, inspect the connection pool before restarting."
};
</code></pre>
<p>The important part is not simply remembering the final fix.</p>
<p>Memora also remembers <strong>how the team got there</strong>.</p>
<p>That includes failed approaches.</p>
<hr />
<h1>Why Failed Approaches Matter</h1>
<p>During an incident, knowing what <strong>not</strong> to do can be just as valuable as knowing what worked.</p>
<p>Suppose a previous incident established that restarting the API caused a connection storm.</p>
<p>If the same symptoms appear again, that information should be available to the engineer before they repeat the same action.</p>
<p>Therefore Memora retains both:</p>
<pre><code class="language-text">Successful approach
        +
Failed approach
        +
Evidence
        +
Root cause
        +
Lesson
</code></pre>
<p>This turns historical incidents into reusable operational experience.</p>
<hr />
<h1>The Most Important Design Principle: Memory Is Not Truth</h1>
<p>Adding memory to an AI agent introduces another problem.</p>
<p>What happens when historical experience looks relevant, but the current incident is actually different?</p>
<p>This is where Memora deliberately avoids blindly trusting memory.</p>
<p>We created explicit evidence labels:</p>
<h3><code>OBSERVED</code></h3>
<p>Facts directly supported by current telemetry or logs.</p>
<h3><code>HISTORICAL</code></h3>
<p>Information recalled from previous incidents through Hindsight.</p>
<h3><code>HYPOTHESIS</code></h3>
<p>A possible explanation that still needs to be tested.</p>
<h3><code>CONFIRMED</code></h3>
<p>A hypothesis supported by current evidence.</p>
<h3><code>RULED_OUT</code></h3>
<p>A hypothesis that was investigated and rejected.</p>
<p>This distinction allows the agent to reason about history without confusing historical knowledge with current facts.</p>
<hr />
<h1>Current Evidence Always Wins</h1>
<p>Consider a second incident.</p>
<p>The symptoms look familiar:</p>
<pre><code class="language-text">Payment API latency
Increasing timeouts
</code></pre>
<p>Memora recalls the previous database connection pool incident.</p>
<p>But this time the evidence is different:</p>
<pre><code class="language-text">DB connection utilization: 34%
Redis memory utilization: 96%
</code></pre>
<p>A naive memory system might say:</p>
<blockquote>
<p>"This looks like the previous incident. Increase the database connection pool."</p>
</blockquote>
<p>Memora should not do that.</p>
<p>Instead, it recognizes the similarity <strong>and the difference</strong>.</p>
<p>Conceptually:</p>
<pre><code class="language-typescript">if (highRedisMemory &amp;&amp; !highDbConnections &amp;&amp; previousDbPoolIncident) {

  differences.push(
    "Current DB connection utilization is normal."
  );

  differences.push(
    "Redis memory pressure is significantly higher."
  );

  hypotheses.push({
    title: "Redis memory pressure",
    label: "HYPOTHESIS"
  });

  hypotheses.push({
    title: "Database connection pool exhaustion",
    label: "RULED_OUT"
  });
}
</code></pre>
<p>The historical incident is still useful.</p>
<p>But it is treated as <strong>evidence</strong>, not truth.</p>
<p>This is one of the most important principles behind Memora:</p>
<blockquote>
<p><strong>History should inform investigation, not override current reality.</strong></p>
</blockquote>
<hr />
<h1>The Three-Scenario Demo</h1>
<p>The easiest way to demonstrate Memora is through three incidents.</p>
<h2>Scenario 1 — Teach Memora</h2>
<h3><code>INC-1001</code></h3>
<p>Service:</p>
<pre><code class="language-text">payment-api
</code></pre>
<p>Symptoms:</p>
<pre><code class="language-text">Latency: 5.2s
Timeouts increasing
DB connections: 99%
</code></pre>
<p>Memora investigates the incident.</p>
<p>The engineer confirms:</p>
<pre><code class="language-text">Root cause:
Database connection pool exhaustion
</code></pre>
<p>The resolution is recorded.</p>
<p>Memora then retains the experience in Hindsight.</p>
<p>At this point, Memora has learned something useful.</p>
<hr />
<h2>Scenario 2 — Memory Changes the Investigation</h2>
<h3><code>INC-1007</code></h3>
<p>Several weeks later, another payment API incident occurs.</p>
<p>The current evidence is:</p>
<pre><code class="language-text">Latency: 5.1s
Timeouts increasing
DB connections: 97%
</code></pre>
<p>Memora recalls <code>INC-1001</code>.</p>
<p>Instead of beginning from a generic checklist, it can surface:</p>
<pre><code class="language-text">Historical incident:
INC-1001

Similar symptoms:
Payment API latency + high DB connections

Historical root cause:
Connection pool exhaustion

Previous successful approach:
Increase connection pool capacity

Previous failed approach:
Restarting the API caused a connection storm

Recommended next check:
Inspect DB connection pool utilization
</code></pre>
<p>The key point is not that Memora automatically fixes the incident.</p>
<p>The key point is:</p>
<p><strong>The previous incident changes the investigation starting point.</strong></p>
<hr />
<h1>Scenario 3 — Memora Knows When History Doesn't Apply</h1>
<h3><code>INC-1008</code></h3>
<p>Another payment API incident occurs.</p>
<p>The symptoms initially look similar:</p>
<pre><code class="language-text">High API latency
Increasing timeouts
</code></pre>
<p>Memora again recalls <code>INC-1001</code>.</p>
<p>But the current evidence says:</p>
<pre><code class="language-text">DB connections: 34%
Redis memory: 96%
</code></pre>
<p>Memora identifies the divergence.</p>
<p>Instead of recommending the historical database fix, it can explain:</p>
<pre><code class="language-text">Historical match:
INC-1001

Why it is relevant:
Similar payment API latency

Why it may not apply:
Current DB connection utilization is normal.

Current evidence:
Redis memory pressure is high.

Historical DB-pool hypothesis:
RULED_OUT
</code></pre>
<p>The investigation can then move toward the Redis-related hypothesis.</p>
<p>This third scenario is critical because it demonstrates that Memora is not simply a retrieval system.</p>
<p><strong>It uses memory while remaining grounded in current evidence.</strong></p>
<hr />
<h1>What Makes Hindsight Central to Memora?</h1>
<p>The core value of Memora depends on the memory loop.</p>
<p>Without memory:</p>
<pre><code class="language-text">Incident
   ↓
Investigation
   ↓
Resolution
   ↓
End
</code></pre>
<p>With Hindsight:</p>
<pre><code class="language-text">Incident
   ↓
Investigation
   ↓
Resolution
   ↓
Retain experience
   ↓
Hindsight
   ↓
Future incident
   ↓
Recall relevant experience
   ↓
Better-informed investigation
</code></pre>
<p>The system therefore becomes capable of accumulating operational knowledge over time.</p>
<p>This aligns with the idea behind memory-powered agents: an agent should not behave as if every interaction is its first experience.</p>
<hr />
<h1>Making Memory Visible</h1>
<p>We also wanted the memory layer to be visible rather than hidden behind the agent.</p>
<p>Inside the Memora incident workspace, historical memory can be surfaced alongside the current investigation.</p>
<p>An engineer should be able to see:</p>
<pre><code class="language-text">CURRENT EVIDENCE
DB connections: 97%
Latency: 5.1s

        ↓

HISTORICAL MEMORY
INC-1001
DB pool exhaustion

        ↓

WHY IT MATTERS
Similar service + similar latency +
high DB connection utilization

        ↓

PREVIOUSLY SUCCESSFUL
Increase connection pool capacity

        ↓

PREVIOUSLY FAILED
Restarting API

        ↓

NEXT CHECK
Inspect DB connection pool
</code></pre>
<p>This makes the agent's reasoning auditable.</p>
<p>Instead of:</p>
<blockquote>
<p>"Trust me. Do this."</p>
</blockquote>
<p>The system communicates:</p>
<blockquote>
<p>"This historical experience is relevant because these current signals match. Here is what happened before, and here is what is different now."</p>
</blockquote>
<p>That distinction is important for engineering workflows where operators need to understand and verify recommendations.</p>
<hr />
<h1>4 Lessons We Learned Building Memora</h1>
<h2>1. Store Experiences, Not Just Data</h2>
<p>Raw logs are valuable for observability, but they are not necessarily useful as long-term agent memory.</p>
<p>The valuable memory is the distilled experience:</p>
<pre><code class="language-text">Symptoms
+
Evidence
+
Investigation
+
Failed approaches
+
Successful approaches
+
Root cause
+
Lesson
</code></pre>
<hr />
<h2>2. Remember Failures Too</h2>
<p>An incident response agent should not only remember:</p>
<blockquote>
<p>"This fixed the problem."</p>
</blockquote>
<p>It should also remember:</p>
<blockquote>
<p>"We tried this and it didn't work."</p>
</blockquote>
<p>Avoiding a known dead end can save valuable investigation time.</p>
<hr />
<h2>3. Historical Memory Must Remain Grounded</h2>
<p>A previous incident is evidence, not proof that the current incident has the same cause.</p>
<p>Memora therefore compares historical experiences against current telemetry.</p>
<p>The system should be willing to say:</p>
<blockquote>
<p>"This looks similar, but the current evidence does not support the same root cause."</p>
</blockquote>
<p>That behavior is more important than simply retrieving a highly similar historical incident.</p>
<hr />
<h2>4. Explain Why Memory Influenced the Agent</h2>
<p>Memory becomes much more useful when the engineer can understand why it was retrieved.</p>
<p>For example:</p>
<pre><code class="language-text">Influenced by INC-1001

Because:
• Same service
• Similar latency pattern
• DB connections currently at 97%
• Previous incident involved DB pool exhaustion
</code></pre>
<p>This makes the relationship between memory and the current investigation explicit.</p>
<hr />
<h1>An Honest Limitation</h1>
<p>Memora is not intended to replace observability platforms, incident-management systems, or experienced SREs.</p>
<p>It also does not automatically execute destructive production actions.</p>
<p>The current system focuses on a narrower problem:</p>
<blockquote>
<p><strong>Helping engineers reuse operational knowledge during incident investigation.</strong></p>
</blockquote>
<p>Another important limitation is that memory quality depends on the quality of the experiences retained.</p>
<p>If an incident is incorrectly diagnosed and that incorrect conclusion is retained, future investigations could be influenced by it.</p>
<p>That is why Memora emphasizes:</p>
<ul>
<li><p>verified resolutions</p>
</li>
<li><p>evidence-backed conclusions</p>
</li>
<li><p>explicit uncertainty</p>
</li>
<li><p>current telemetry</p>
</li>
<li><p>visible historical context</p>
</li>
<li><p>human verification</p>
</li>
</ul>
<p>Memory should make an agent more informed—not make it blindly confident.</p>
<hr />
<h1>Where Memora Goes Next</h1>
<p>The current implementation focuses on one workflow:</p>
<p><strong>Incident investigation.</strong></p>
<p>The same memory architecture could eventually support broader engineering workflows:</p>
<ul>
<li><p>Deployment troubleshooting</p>
</li>
<li><p>CI/CD failure analysis</p>
</li>
<li><p>Code review knowledge</p>
</li>
<li><p>Customer support history</p>
</li>
<li><p>Infrastructure changes</p>
</li>
<li><p>Runbook evolution</p>
</li>
<li><p>Post-mortem analysis</p>
</li>
</ul>
<p>The long-term idea is larger than incident response.</p>
<p>Engineering organizations continuously generate knowledge.</p>
<p>The challenge is making that knowledge reusable when it matters.</p>
<hr />
<h1>Final Takeaway</h1>
<p>The most interesting part of building an AI agent is not making it answer a question.</p>
<p>It is making the agent <strong>better because it has experienced something before</strong>.</p>
<p>Memora explores that idea through incident response.</p>
<p>A production incident teaches the system.</p>
<p>A future incident recalls that experience.</p>
<p>The current evidence determines whether the memory still applies.</p>
<p>And the resulting investigation becomes another experience that can be remembered.</p>
<p>That creates a simple but powerful loop:</p>
<blockquote>
<p><strong>Experience → Memory → Recall → Reason → Learn</strong></p>
</blockquote>
<p>We built Memora around one belief:</p>
<blockquote>
<p><strong>Infrastructure should not have to forget what engineers already learned.</strong></p>
</blockquote>
<h3>Resources</h3>
<ul>
<li><p><a href="https://github.com/vectorize-io/hindsight">Hindsight GitHub Repository</a></p>
</li>
<li><p><a href="https://hindsight.vectorize.io/">Hinds</a></p>
<h1>How We Built Infrastructure That Remembers Using Hindsight</h1>
<p>Production incidents rarely happen at a convenient time.</p>
<p>Imagine it is 3:14 AM. A payment API suddenly starts timing out, latency climbs above five seconds, and an engineer on call begins investigating. CPU looks suspicious, so pods are checked. Network latency is investigated. A few common fixes are considered.</p>
<p>Twenty minutes later, the team finally checks the database connection pool.</p>
<p>It is saturated at 99%.</p>
<p>The team increases the pool capacity, latency returns to normal, and the incident is resolved.</p>
<p>But there is a frustrating question:</p>
<p><strong>Hasn't this happened before?</strong></p>
<p>A previous incident had produced almost the same symptoms. The post-mortem contained the root cause, the metrics that should have been checked first, and an important warning: restarting the API could trigger a connection storm and make the situation worse.</p>
<p>The information existed.</p>
<p>The problem was that the system did not remember it when the next incident happened.</p>
<p>That is the problem we wanted to solve with <strong>Memora</strong>.</p>
<blockquote>
<p><strong>Memora — Infrastructure that remembers.</strong></p>
</blockquote>
<p>Memora is a memory-powered incident response agent that uses <strong>Hindsight</strong> to retain operational experience from resolved incidents and recall that experience when similar incidents occur.</p>
<p>Instead of treating every incident as a completely new problem, Memora allows an AI agent to learn from previous investigations, successful fixes, failed approaches, and post-incident lessons.</p>
<hr />
<h2>The Problem: Engineering Teams Keep Rediscovering the Same Knowledge</h2>
<p>Modern engineering teams have plenty of observability data.</p>
<p>They have:</p>
<ul>
<li><p>Logs</p>
</li>
<li><p>Metrics</p>
</li>
<li><p>Alerts</p>
</li>
<li><p>Incident tickets</p>
</li>
<li><p>Runbooks</p>
</li>
<li><p>Deployment history</p>
</li>
<li><p>Post-mortems</p>
</li>
<li><p>Slack or Teams discussions</p>
</li>
<li><p>Documentation</p>
</li>
</ul>
<p>But this information is usually fragmented across different systems.</p>
<p>When a new incident occurs, an engineer has to reconstruct the context manually.</p>
<p>This creates a hidden operational cost:</p>
<p><strong>Repeated rediscovery.</strong></p>
<p>A previous engineer may already have discovered the root cause. Someone may already have tested an approach that failed. A runbook may already explain the correct investigation path.</p>
<p>Yet the next incident can still begin from zero.</p>
<p>The problem is therefore not simply a lack of data.</p>
<p><strong>Engineering teams need persistent operational memory.</strong></p>
<hr />
<h1>Meet Memora</h1>
<p>Memora is an incident response agent designed around a simple idea:</p>
<blockquote>
<p><strong>Infrastructure should remember what engineers have already learned.</strong></p>
</blockquote>
<p>The workflow is straightforward:</p>
<p><strong>Incident → Investigate → Recall → Compare → Resolve → Learn</strong></p>
<p>When an incident occurs, Memora examines the current evidence and recalls relevant historical experiences from Hindsight.</p>
<p>It then compares the current situation with previous incidents rather than blindly copying an old solution.</p>
<p>Once the incident is resolved, the important operational experience is retained for future investigations.</p>
<p>This creates a learning loop:</p>
<pre><code class="language-text">                    ┌──────────────────┐
                    │  Production      │
                    │  Incident        │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Current Evidence │
                    │ Logs / Metrics   │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Memora Agent     │
                    │ Investigation    │
                    └────────┬─────────┘
                             │
                   ┌─────────┴─────────┐
                   ▼                   ▼
          ┌────────────────┐   ┌────────────────┐
          │ Current        │   │ Hindsight      │
          │ Evidence       │   │ Memory         │
          └────────┬───────┘   └───────┬────────┘
                   │                   │
                   └─────────┬─────────┘
                             ▼
                    ┌──────────────────┐
                    │ Compare &amp; Reason │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Investigation    │
                    │ &amp; Resolution     │
                    └────────┬─────────┘
                             │
                             ▼
                    ┌──────────────────┐
                    │ Retain Learning  │
                    │ in Hindsight     │
                    └──────────────────┘
</code></pre>
<hr />
<h1>The System Architecture</h1>
<p>Memora separates application state from reusable operational experience.</p>
<pre><code class="language-text">┌──────────────────────────────────────────────────────┐
│                  React + Vite UI                     │
│     Incident Workspace | Evidence | Agent | Memory  │
└─────────────────────────┬────────────────────────────┘
                          │
                       HTTP/REST
                          │
┌─────────────────────────▼────────────────────────────┐
│                 Node.js / Express API                │
├─────────────────────────┬────────────────────────────┤
│      Supabase           │       Hindsight            │
│      PostgreSQL         │       Memory Engine        │
│                         │                            │
│ • Incidents             │ • Historical experiences   │
│ • Evidence              │ • Successful approaches   │
│ • Investigation steps   │ • Failed approaches       │
│ • Runbooks              │ • Lessons learned         │
│ • Resolutions           │ • Operational context     │
└─────────────────────────┴────────────────────────────┘
</code></pre>
<h3>Supabase PostgreSQL</h3>
<p>Supabase stores the application's structured state:</p>
<ul>
<li><p>Incidents</p>
</li>
<li><p>Incident evidence</p>
</li>
<li><p>Investigation steps</p>
</li>
<li><p>Runbooks</p>
</li>
<li><p>Resolutions</p>
</li>
<li><p>Audit information</p>
</li>
</ul>
<p>It acts as the application's source of truth.</p>
<h3>Hindsight</h3>
<p>Hindsight is used for a different purpose: <strong>reusable agent experience</strong>.</p>
<p>Instead of storing the entire history of raw logs, Memora retains distilled operational knowledge that can be useful during future investigations.</p>
<p>This separation is important.</p>
<p>PostgreSQL answers:</p>
<blockquote>
<p><strong>What happened in the application?</strong></p>
</blockquote>
<p>Hindsight helps answer:</p>
<blockquote>
<p><strong>What have we learned from similar incidents before?</strong></p>
</blockquote>
<hr />
<h1>Why We Didn't Just Store Raw Logs</h1>
<p>One of the first design questions was:</p>
<p><strong>Why not simply put every incident log into a vector database and search for similar logs?</strong></p>
<p>Because raw logs are noisy.</p>
<p>A typical production log can contain:</p>
<ul>
<li><p>timestamps</p>
</li>
<li><p>container IDs</p>
</li>
<li><p>request IDs</p>
</li>
<li><p>stack traces</p>
</li>
<li><p>repeated messages</p>
</li>
<li><p>transient values</p>
</li>
<li><p>infrastructure-specific metadata</p>
</li>
</ul>
<p>Finding a similar string does not necessarily mean finding a useful operational experience.</p>
<p>An alert saying:</p>
<pre><code class="language-text">Payment API latency exceeded 5 seconds
</code></pre>
<p>does not tell an engineer:</p>
<ul>
<li><p>what caused it</p>
</li>
<li><p>which checks were performed</p>
</li>
<li><p>what failed</p>
</li>
<li><p>what worked</p>
</li>
<li><p>what should be avoided next time</p>
</li>
<li><p>what evidence confirmed the root cause</p>
</li>
</ul>
<p>Memora therefore focuses on <strong>experience rather than raw history</strong>.</p>
<hr />
<h1>What Memora Remembers</h1>
<p>After an incident is resolved, Memora extracts the useful operational knowledge into a structured experience.</p>
<p>For example:</p>
<pre><code class="language-typescript">const experienceToRetain = {
  type: "incident_experience",

  service: "payment-api",

  incident_key: "INC-1001",

  symptoms: [
    "Payment API latency",
    "Increasing timeouts"
  ],

  important_evidence: [
    "DB connections: 99%",
    "API latency: 5.2s"
  ],

  root_cause:
    "Database connection pool exhaustion",

  investigation_path: [
    "Checked CPU and ruled out throttling",
    "Inspected DB connection pool",
    "Confirmed connection exhaustion"
  ],

  failed_approaches: [
    "Restarting the API caused a cold-start connection storm"
  ],

  successful_approaches: [
    "Increased database connection pool capacity"
  ],

  runbook: "DB-CONNECTION-POOL-03",

  outcome:
    "Latency returned to normal",

  lesson:
    "When payment-api latency coincides with high DB connections, inspect the connection pool before restarting."
};
</code></pre>
<p>The important part is not simply remembering the final fix.</p>
<p>Memora also remembers <strong>how the team got there</strong>.</p>
<p>That includes failed approaches.</p>
<hr />
<h1>Why Failed Approaches Matter</h1>
<p>During an incident, knowing what <strong>not</strong> to do can be just as valuable as knowing what worked.</p>
<p>Suppose a previous incident established that restarting the API caused a connection storm.</p>
<p>If the same symptoms appear again, that information should be available to the engineer before they repeat the same action.</p>
<p>Therefore Memora retains both:</p>
<pre><code class="language-text">Successful approach
        +
Failed approach
        +
Evidence
        +
Root cause
        +
Lesson
</code></pre>
<p>This turns historical incidents into reusable operational experience.</p>
<hr />
<h1>The Most Important Design Principle: Memory Is Not Truth</h1>
<p>Adding memory to an AI agent introduces another problem.</p>
<p>What happens when historical experience looks relevant, but the current incident is actually different?</p>
<p>This is where Memora deliberately avoids blindly trusting memory.</p>
<p>We created explicit evidence labels:</p>
<h3><code>OBSERVED</code></h3>
<p>Facts directly supported by current telemetry or logs.</p>
<h3><code>HISTORICAL</code></h3>
<p>Information recalled from previous incidents through Hindsight.</p>
<h3><code>HYPOTHESIS</code></h3>
<p>A possible explanation that still needs to be tested.</p>
<h3><code>CONFIRMED</code></h3>
<p>A hypothesis supported by current evidence.</p>
<h3><code>RULED_OUT</code></h3>
<p>A hypothesis that was investigated and rejected.</p>
<p>This distinction allows the agent to reason about history without confusing historical knowledge with current facts.</p>
<hr />
<h1>Current Evidence Always Wins</h1>
<p>Consider a second incident.</p>
<p>The symptoms look familiar:</p>
<pre><code class="language-text">Payment API latency
Increasing timeouts
</code></pre>
<p>Memora recalls the previous database connection pool incident.</p>
<p>But this time the evidence is different:</p>
<pre><code class="language-text">DB connection utilization: 34%
Redis memory utilization: 96%
</code></pre>
<p>A naive memory system might say:</p>
<blockquote>
<p>"This looks like the previous incident. Increase the database connection pool."</p>
</blockquote>
<p>Memora should not do that.</p>
<p>Instead, it recognizes the similarity <strong>and the difference</strong>.</p>
<p>Conceptually:</p>
<pre><code class="language-typescript">if (highRedisMemory &amp;&amp; !highDbConnections &amp;&amp; previousDbPoolIncident) {

  differences.push(
    "Current DB connection utilization is normal."
  );

  differences.push(
    "Redis memory pressure is significantly higher."
  );

  hypotheses.push({
    title: "Redis memory pressure",
    label: "HYPOTHESIS"
  });

  hypotheses.push({
    title: "Database connection pool exhaustion",
    label: "RULED_OUT"
  });
}
</code></pre>
<p>The historical incident is still useful.</p>
<p>But it is treated as <strong>evidence</strong>, not truth.</p>
<p>This is one of the most important principles behind Memora:</p>
<blockquote>
<p><strong>History should inform investigation, not override current reality.</strong></p>
</blockquote>
<hr />
<h1>The Three-Scenario Demo</h1>
<p>The easiest way to demonstrate Memora is through three incidents.</p>
<h2>Scenario 1 — Teach Memora</h2>
<h3><code>INC-1001</code></h3>
<p>Service:</p>
<pre><code class="language-text">payment-api
</code></pre>
<p>Symptoms:</p>
<pre><code class="language-text">Latency: 5.2s
Timeouts increasing
DB connections: 99%
</code></pre>
<p>Memora investigates the incident.</p>
<p>The engineer confirms:</p>
<pre><code class="language-text">Root cause:
Database connection pool exhaustion
</code></pre>
<p>The resolution is recorded.</p>
<p>Memora then retains the experience in Hindsight.</p>
<p>At this point, Memora has learned something useful.</p>
<hr />
<h2>Scenario 2 — Memory Changes the Investigation</h2>
<h3><code>INC-1007</code></h3>
<p>Several weeks later, another payment API incident occurs.</p>
<p>The current evidence is:</p>
<pre><code class="language-text">Latency: 5.1s
Timeouts increasing
DB connections: 97%
</code></pre>
<p>Memora recalls <code>INC-1001</code>.</p>
<p>Instead of beginning from a generic checklist, it can surface:</p>
<pre><code class="language-text">Historical incident:
INC-1001

Similar symptoms:
Payment API latency + high DB connections

Historical root cause:
Connection pool exhaustion

Previous successful approach:
Increase connection pool capacity

Previous failed approach:
Restarting the API caused a connection storm

Recommended next check:
Inspect DB connection pool utilization
</code></pre>
<p>The key point is not that Memora automatically fixes the incident.</p>
<p>The key point is:</p>
<p><strong>The previous incident changes the investigation starting point.</strong></p>
<hr />
<h1>Scenario 3 — Memora Knows When History Doesn't Apply</h1>
<h3><code>INC-1008</code></h3>
<p>Another payment API incident occurs.</p>
<p>The symptoms initially look similar:</p>
<pre><code class="language-text">High API latency
Increasing timeouts
</code></pre>
<p>Memora again recalls <code>INC-1001</code>.</p>
<p>But the current evidence says:</p>
<pre><code class="language-text">DB connections: 34%
Redis memory: 96%
</code></pre>
<p>Memora identifies the divergence.</p>
<p>Instead of recommending the historical database fix, it can explain:</p>
<pre><code class="language-text">Historical match:
INC-1001

Why it is relevant:
Similar payment API latency

Why it may not apply:
Current DB connection utilization is normal.

Current evidence:
Redis memory pressure is high.

Historical DB-pool hypothesis:
RULED_OUT
</code></pre>
<p>The investigation can then move toward the Redis-related hypothesis.</p>
<p>This third scenario is critical because it demonstrates that Memora is not simply a retrieval system.</p>
<p><strong>It uses memory while remaining grounded in current evidence.</strong></p>
<hr />
<h1>What Makes Hindsight Central to Memora?</h1>
<p>The core value of Memora depends on the memory loop.</p>
<p>Without memory:</p>
<pre><code class="language-text">Incident
   ↓
Investigation
   ↓
Resolution
   ↓
End
</code></pre>
<p>With Hindsight:</p>
<pre><code class="language-text">Incident
   ↓
Investigation
   ↓
Resolution
   ↓
Retain experience
   ↓
Hindsight
   ↓
Future incident
   ↓
Recall relevant experience
   ↓
Better-informed investigation
</code></pre>
<p>The system therefore becomes capable of accumulating operational knowledge over time.</p>
<p>This aligns with the idea behind memory-powered agents: an agent should not behave as if every interaction is its first experience.</p>
<hr />
<h1>Making Memory Visible</h1>
<p>We also wanted the memory layer to be visible rather than hidden behind the agent.</p>
<p>Inside the Memora incident workspace, historical memory can be surfaced alongside the current investigation.</p>
<p>An engineer should be able to see:</p>
<pre><code class="language-text">CURRENT EVIDENCE
DB connections: 97%
Latency: 5.1s

        ↓

HISTORICAL MEMORY
INC-1001
DB pool exhaustion

        ↓

WHY IT MATTERS
Similar service + similar latency +
high DB connection utilization

        ↓

PREVIOUSLY SUCCESSFUL
Increase connection pool capacity

        ↓

PREVIOUSLY FAILED
Restarting API

        ↓

NEXT CHECK
Inspect DB connection pool
</code></pre>
<p>This makes the agent's reasoning auditable.</p>
<p>Instead of:</p>
<blockquote>
<p>"Trust me. Do this."</p>
</blockquote>
<p>The system communicates:</p>
<blockquote>
<p>"This historical experience is relevant because these current signals match. Here is what happened before, and here is what is different now."</p>
</blockquote>
<p>That distinction is important for engineering workflows where operators need to understand and verify recommendations.</p>
<hr />
<h1>4 Lessons We Learned Building Memora</h1>
<h2>1. Store Experiences, Not Just Data</h2>
<p>Raw logs are valuable for observability, but they are not necessarily useful as long-term agent memory.</p>
<p>The valuable memory is the distilled experience:</p>
<pre><code class="language-text">Symptoms
+
Evidence
+
Investigation
+
Failed approaches
+
Successful approaches
+
Root cause
+
Lesson
</code></pre>
<hr />
<h2>2. Remember Failures Too</h2>
<p>An incident response agent should not only remember:</p>
<blockquote>
<p>"This fixed the problem."</p>
</blockquote>
<p>It should also remember:</p>
<blockquote>
<p>"We tried this and it didn't work."</p>
</blockquote>
<p>Avoiding a known dead end can save valuable investigation time.</p>
<hr />
<h2>3. Historical Memory Must Remain Grounded</h2>
<p>A previous incident is evidence, not proof that the current incident has the same cause.</p>
<p>Memora therefore compares historical experiences against current telemetry.</p>
<p>The system should be willing to say:</p>
<blockquote>
<p>"This looks similar, but the current evidence does not support the same root cause."</p>
</blockquote>
<p>That behavior is more important than simply retrieving a highly similar historical incident.</p>
<hr />
<h2>4. Explain Why Memory Influenced the Agent</h2>
<p>Memory becomes much more useful when the engineer can understand why it was retrieved.</p>
<p>For example:</p>
<pre><code class="language-text">Influenced by INC-1001

Because:
• Same service
• Similar latency pattern
• DB connections currently at 97%
• Previous incident involved DB pool exhaustion
</code></pre>
<p>This makes the relationship between memory and the current investigation explicit.</p>
<hr />
<h1>An Honest Limitation</h1>
<p>Memora is not intended to replace observability platforms, incident-management systems, or experienced SREs.</p>
<p>It also does not automatically execute destructive production actions.</p>
<p>The current system focuses on a narrower problem:</p>
<blockquote>
<p><strong>Helping engineers reuse operational knowledge during incident investigation.</strong></p>
</blockquote>
<p>Another important limitation is that memory quality depends on the quality of the experiences retained.</p>
<p>If an incident is incorrectly diagnosed and that incorrect conclusion is retained, future investigations could be influenced by it.</p>
<p>That is why Memora emphasizes:</p>
<ul>
<li><p>verified resolutions</p>
</li>
<li><p>evidence-backed conclusions</p>
</li>
<li><p>explicit uncertainty</p>
</li>
<li><p>current telemetry</p>
</li>
<li><p>visible historical context</p>
</li>
<li><p>human verification</p>
</li>
</ul>
<p>Memory should make an agent more informed—not make it blindly confident.</p>
<hr />
<h1>Where Memora Goes Next</h1>
<p>The current implementation focuses on one workflow:</p>
<p><strong>Incident investigation.</strong></p>
<p>The same memory architecture could eventually support broader engineering workflows:</p>
<ul>
<li><p>Deployment troubleshooting</p>
</li>
<li><p>CI/CD failure analysis</p>
</li>
<li><p>Code review knowledge</p>
</li>
<li><p>Customer support history</p>
</li>
<li><p>Infrastructure changes</p>
</li>
<li><p>Runbook evolution</p>
</li>
<li><p>Post-mortem analysis</p>
</li>
</ul>
<p>The long-term idea is larger than incident response.</p>
<p>Engineering organizations continuously generate knowledge.</p>
<p>The challenge is making that knowledge reusable when it matters.</p>
<hr />
<h1>Final Takeaway</h1>
<p>The most interesting part of building an AI agent is not making it answer a question.</p>
<p>It is making the agent <strong>better because it has experienced something before</strong>.</p>
<p>Memora explores that idea through incident response.</p>
<p>A production incident teaches the system.</p>
<p>A future incident recalls that experience.</p>
<p>The current evidence determines whether the memory still applies.</p>
<p>And the resulting investigation becomes another experience that can be remembered.</p>
<p>That creates a simple but powerful loop:</p>
<blockquote>
<p><strong>Experience → Memory → Recall → Reason → Learn</strong></p>
</blockquote>
<p>We built Memora around one belief:</p>
<blockquote>
<p><strong>Infrastructure should not have to forget what engineers already learned.</strong></p>
</blockquote>
<h3>Resources</h3>
<h2>Resources</h2>
<ul>
<li><p><a href="https://github.com/ALLENKISAIRAKESH/MEMORA"><strong>Memora GitHub Repository</strong></a> — Source code, architecture, database schema, Hindsight integration, and demo implementation.</p>
</li>
<li><p><a href="https://github.com/vectorize-io/hindsight"><strong>Hindsight GitHub Repository</strong></a> — Open-source memory infrastructure used by Memora.</p>
</li>
<li><p><a href="https://hindsight.vectorize.io/"><strong>Hindsight Documentation</strong></a> — Documentation for understanding and integrating Hindsight.</p>
</li>
<li><p><a href="https://vectorize.io/what-is-agent-memory"><strong>Vectorize — What is Agent Memory?</strong></a> — Background on persistent memory for AI agents.</p>
</li>
</ul>
</li>
</ul>
]]></content:encoded></item></channel></rss>