Dev.to AI 🤖 Ai 👁 0 📖 3 min read

Why I Replaced Vector Search with Hindsight for Meeting Notes

Querying Hindsight Memory Engine Before generating the dossier, the backend queries Hindsight to fetch historical context, past commitments, and entity-specific constraints related to the client. import { HindsightClient

  1. Querying Hindsight Memory Engine Before generating the dossier, the backend queries Hindsight to fetch historical context, past commitments, and entity-specific constraints related to the client. import { HindsightClient } from '@vectorize-io/hindsight';

const hindsight = new HindsightClient({
apiKey: process.env.HINDSIGHT_API_KEY,
});

export async function fetchEntityMemory(companyName: string, meetingPurpose: string) {
// Retrieve continuous contextual facts rather than simple keyword matches
const memoryContext = await hindsight.retrieveMemory({
entityId: companyName,
query: meetingPurpose,
includeUnresolvedPromises: true,
temporalOrdering: 'descending',
});

return {
historySummary: memoryContext.summary,
openCommitments: memoryContext.unresolvedPromises,
pastFrictionPoints: memoryContext.historicalRisks,
};
}

  1. Synthesizing the Structured Dossier Payload The engine formats the retrieved memory along with current inputs to prompt the model for a strictly structured response.export async function generateDossier(inputs: MeetingInputs) { const memory = await fetchEntityMemory(inputs.companyName, inputs.purpose);

const prompt = `
You are an executive preparation engine. Generate a structured brief using this context:

Target: ${inputs.companyName}
Title: ${inputs.title}
Purpose: ${inputs.purpose}
Raw User Notes: ${inputs.previousNotes || 'None'}

Hindsight Memory Facts:
- Background: ${memory.historySummary}
- Open Promises: ${JSON.stringify(memory.openCommitments)}
- Past Friction: ${JSON.stringify(memory.pastFrictionPoints)}

Return a JSON payload with: objectives, companySummary, timedAgenda, questions, talkingPoints, objections, and postMeetingActionPlan.

`;

const response = await callLLM({
prompt,
responseFormat: 'json_object',
temperature: 0.2,
});

return JSON.parse(response.content);
}

  1. Rendering the Timed Agenda Component The UI renders the structured output directly into a clean, actionable prep sheet.export function AgendaSection({ agendaItems }: { agendaItems: AgendaItem[] }) { return (

    Key Discussion Points

    {agendaItems.map((item, index) => ( {index + 1}. {item.title} {item.durationMins} mins

    {item.description}

    ))} ); }4. Real-World Behavior & Example Interaction To see the system in action, consider a scenario where we are preparing for a follow-up call with ABC Technologies. Inputs Company: ABC Technologies Title: Project Discussion Meeting Purpose: Strengthen partnership, review recent milestones, address operational friction, and align on upcoming goals. Raw Notes: "Client mentioned interest in feature expansion but expressed worries about development time and budget adjustments during our last check-in." Generated Output Instead of returning a wall of text, the system generates a partitioned, executive-ready view: Meeting Objective: Strengthen partnership with ABC Technologies, review milestones, address friction, and align on upcoming goals. Success Criteria: Client feels heard regarding momentum; open deliverables have clear owners; expansion opportunities identified. Person / Company Summary: ABC Technologies wants a simple solution completed within a reasonable timeframe. Hindsight notes flag previous questions regarding development cost and timelines. Timed Agenda: 00:00 - 00:05 Welcome & Agenda Alignment 00:05 - 00:15 Review Past Action Items & Updates (addressing open notes explicitly) 00:15 - 00:35 Core Topic: Software Project Requirements & Deliverables 00:35 - 00:45 Strategic Context & Specific Constraints 00:45 - 00:50 Wrap-Up & Immediate Next Steps Objection Handling: Concern: Delays or misunderstandings on previous deliverables. Mitigation: Own the friction transparently, provide an immediate remediation timeline, and install updated check-in gates. Concern: Scope creep or pricing adjustment resistance. Mitigation: Show clear trade-offs between speed, scope, and quality. Provide modular options so the client stays in control.
  2. Lessons Learned Memory beats context window size: Blindly dumping thousands of tokens of chat history into the prompt introduces noise. Extracting specific facts and unresolved commitments via persistent memory engines like Hindsight yields significantly cleaner LLM outputs. Deterministic structures enforce focus: LLMs tend to drift into conversational fluff when asked to "prepare a meeting notes summary." Forcing the output into explicit categories (Objectives, Timed Agendas, Objections, Next Steps) makes the agent immediately useful in real-life workflows. Pre-call checklists reduce operational panic: Technical prep is only half the battle. Adding a simple 3-minute readiness checklist (testing mic, opening browser tabs, reviewing recent updates) prevents avoidable last-minute stumbles. Time-boxing agendas improves call execution: Forcing the LLM to allocate fixed minute blocks to each agenda topic prevents meetings from spiraling into unstructured discussions that run over time.
📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.