"The on-call agent that has seen this outage before."

When production breaks at 2 AM, the on-call engineer starts from zero. The fix for this exact failure usually exists in a Slack thread or postmortem from weeks ago that nobody remembers. Generic LLMs give generic advice ("check your logs, restart the service"), missing critical operational parameters and historical failure patterns.
Déjà Vu is an incident-response agent powered by Hindsight (Vectorize's agent memory engine). It retains every resolved production incident—including symptoms, root cause, exact resolution steps, what didn't work, and who resolved it—alongside team operational rules. When a new alert fires, Déjà Vu recalls past incidents, grounds its triage in recalled memory, and uses reflection to identify systemic failure loops across the incident ledger.
Déjà Vu leverages Hindsight via @vectorize-io/hindsight-client across three primary workflows:
graph TD
User([On-Call Engineer]) -->|Paste Alert / Select Demo| UI[Next.js App Router UI]
UI -->|POST /api/triage| TriageRoute[app/api/triage/route.ts]
subgraph Memory Loop
TriageRoute -->|1. recallSimilar| HindsightRecall[Hindsight Bank]
HindsightRecall -->|Recalled Context| TriageRoute
TriageRoute -->|2. Prompt + Context| Groq[Groq OpenAI API]
Groq -->|Grounded Triage JSON| UI
UI -->|POST /api/resolve| ResolveRoute[app/api/resolve/route.ts]
ResolveRoute -->|3. retainIncident| HindsightRetain[Hindsight Bank]
UI -->|POST /api/patterns| ReflectRoute[app/api/patterns/route.ts]
ReflectRoute -->|4. reflectPatterns| HindsightReflect[Hindsight Bank]
end
lib/hindsight.ts & app/api/seed/route.ts)Each resolved incident is stored as a rich natural-language memory document with ISO timestamps and tags:
// Retain single incident document into Hindsight bank
await client.retain(bankId, formatIncidentDocument(incident), {
timestamp: new Date(incident.started_at),
context: "resolved production incident",
documentId: incident.id,
tags: [incident.service, incident.severity, "incident"],
metadata: { incident_id: incident.id, service: incident.service }
});
lib/hindsight.ts & app/api/triage/route.ts)When a raw alert fires, Hindsight recalls top matching historical incidents before the LLM generates a response:
// Recall past incidents matching the alert query
const response = await client.recall(bankId, query, { maxTokens: 4096 });
const recalledMemories = response.results;
lib/hindsight.ts & app/api/patterns/route.ts)Synthesis across all historical memories to detect systemic failure loops:
// Reflect over incident history for failure patterns
const response = await client.reflect(bankId,
"What recurring failure patterns exist across our incidents, and what systemic fixes would prevent them?"
);
| Feature | Without Memory (Generic LLM) | With Hindsight (Déjà Vu) |
|---|---|---|
| Verdict | similar — generic guess | similar — 3 exact past matches cited |
| Confidence | 85% | 90% (+5pp) |
| Recall Latency | N/A | 1,644ms (100 memory units searched) |
| Root Cause | "High database load or missing index" | pgbouncer connection pool exhaustion after payments-worker concurrency increase |
| Immediate Actions | "Restart database server" | Lower PAYMENTS_WORKER_CONCURRENCY to 16; set default_pool_size=50 in pgbouncer.ini |
| What NOT To Do | N/A | Do NOT restart payments-worker pods — only relieves connection choke for ~10 minutes |
| End-to-End Time | ~2,000ms | ~6,250ms (recall + LLM synthesis) |
@vectorize-io/hindsight-client (Hindsight API)openai/gpt-oss-120b with qwen/qwen3-32b fallback)git clone https://github.com/your-username/dejavu-oncall.git
cd dejavu-oncall
npm install
Copy .env.example to .env.local and add your API keys:
GROQ_API_KEY=your_groq_api_key_here
HINDSIGHT_API_KEY=your_hindsight_api_key_here
HINDSIGHT_BASE_URL=https://api.hindsight.vectorize.io
HINDSIGHT_BANK_ID=dejavu-oncall
npm run dev
Open http://localhost:3000 in your browser.
Navigate to http://localhost:3000/memory and click "SEED MEMORY BANK" to populate 18 historical Kirana Cloud incidents and 6 operational preferences into Hindsight.
/console on http://localhost:3000.INC-2104 and INC-2148 in ~140ms, identifies the exact pgbouncer pool exhaustion, cites prior postmortems, and warns not to restart pods because connections choke again after 10 minutes.NOVEL. Fill in the "Resolve & Retain" form and commit it to Hindsight memory bank.SEEN BEFORE.Deploy with zero configuration:
vercel --prod
Ensure GROQ_API_KEY, HINDSIGHT_API_KEY, HINDSIGHT_BASE_URL, and HINDSIGHT_BANK_ID are configured in Vercel project environment variables.
MIT License. Free for open-source use.
TypeScript
97.2%
CSS
2.7%
"The on-call agent that has seen this outage before."

When production breaks at 2 AM, the on-call engineer starts from zero. The fix for this exact failure usually exists in a Slack thread or postmortem from weeks ago that nobody remembers. Generic LLMs give generic advice ("check your logs, restart the service"), missing critical operational parameters and historical failure patterns.
Déjà Vu is an incident-response agent powered by Hindsight (Vectorize's agent memory engine). It retains every resolved production incident—including symptoms, root cause, exact resolution steps, what didn't work, and who resolved it—alongside team operational rules. When a new alert fires, Déjà Vu recalls past incidents, grounds its triage in recalled memory, and uses reflection to identify systemic failure loops across the incident ledger.
Déjà Vu leverages Hindsight via @vectorize-io/hindsight-client across three primary workflows:
graph TD
User([On-Call Engineer]) -->|Paste Alert / Select Demo| UI[Next.js App Router UI]
UI -->|POST /api/triage| TriageRoute[app/api/triage/route.ts]
subgraph Memory Loop
TriageRoute -->|1. recallSimilar| HindsightRecall[Hindsight Bank]
HindsightRecall -->|Recalled Context| TriageRoute
TriageRoute -->|2. Prompt + Context| Groq[Groq OpenAI API]
Groq -->|Grounded Triage JSON| UI
UI -->|POST /api/resolve| ResolveRoute[app/api/resolve/route.ts]
ResolveRoute -->|3. retainIncident| HindsightRetain[Hindsight Bank]
UI -->|POST /api/patterns| ReflectRoute[app/api/patterns/route.ts]
ReflectRoute -->|4. reflectPatterns| HindsightReflect[Hindsight Bank]
end
lib/hindsight.ts & app/api/seed/route.ts)Each resolved incident is stored as a rich natural-language memory document with ISO timestamps and tags:
// Retain single incident document into Hindsight bank
await client.retain(bankId, formatIncidentDocument(incident), {
timestamp: new Date(incident.started_at),
context: "resolved production incident",
documentId: incident.id,
tags: [incident.service, incident.severity, "incident"],
metadata: { incident_id: incident.id, service: incident.service }
});
lib/hindsight.ts & app/api/triage/route.ts)When a raw alert fires, Hindsight recalls top matching historical incidents before the LLM generates a response:
// Recall past incidents matching the alert query
const response = await client.recall(bankId, query, { maxTokens: 4096 });
const recalledMemories = response.results;
lib/hindsight.ts & app/api/patterns/route.ts)Synthesis across all historical memories to detect systemic failure loops:
// Reflect over incident history for failure patterns
const response = await client.reflect(bankId,
"What recurring failure patterns exist across our incidents, and what systemic fixes would prevent them?"
);
| Feature | Without Memory (Generic LLM) | With Hindsight (Déjà Vu) |
|---|---|---|
| Verdict | similar — generic guess | similar — 3 exact past matches cited |
| Confidence | 85% | 90% (+5pp) |
| Recall Latency | N/A | 1,644ms (100 memory units searched) |
| Root Cause | "High database load or missing index" | pgbouncer connection pool exhaustion after payments-worker concurrency increase |
| Immediate Actions | "Restart database server" | Lower PAYMENTS_WORKER_CONCURRENCY to 16; set default_pool_size=50 in pgbouncer.ini |
| What NOT To Do | N/A | Do NOT restart payments-worker pods — only relieves connection choke for ~10 minutes |
| End-to-End Time | ~2,000ms | ~6,250ms (recall + LLM synthesis) |
@vectorize-io/hindsight-client (Hindsight API)openai/gpt-oss-120b with qwen/qwen3-32b fallback)git clone https://github.com/your-username/dejavu-oncall.git
cd dejavu-oncall
npm install
Copy .env.example to .env.local and add your API keys:
GROQ_API_KEY=your_groq_api_key_here
HINDSIGHT_API_KEY=your_hindsight_api_key_here
HINDSIGHT_BASE_URL=https://api.hindsight.vectorize.io
HINDSIGHT_BANK_ID=dejavu-oncall
npm run dev
Open http://localhost:3000 in your browser.
Navigate to http://localhost:3000/memory and click "SEED MEMORY BANK" to populate 18 historical Kirana Cloud incidents and 6 operational preferences into Hindsight.
/console on http://localhost:3000.INC-2104 and INC-2148 in ~140ms, identifies the exact pgbouncer pool exhaustion, cites prior postmortems, and warns not to restart pods because connections choke again after 10 minutes.NOVEL. Fill in the "Resolve & Retain" form and commit it to Hindsight memory bank.SEEN BEFORE.Deploy with zero configuration:
vercel --prod
Ensure GROQ_API_KEY, HINDSIGHT_API_KEY, HINDSIGHT_BASE_URL, and HINDSIGHT_BANK_ID are configured in Vercel project environment variables.
MIT License. Free for open-source use.
TypeScript
97.2%
CSS
2.7%