Before call four of a $180,000 deal, my sales agent opened its brief with a warning I could easily have missed: security clearance had to land by November 20, or the whole deal would slip to next year's budget cycle.
A normal chatbot can't do that. Its brief on call four reads like its brief on call one. This is how I used Hindsight to fix that, and what I would keep if I built it again.
The problem
A sales rep talks to the same prospect across several calls. Each call adds objections, new stakeholders and promises with due dates. By call four, the rep is juggling a CFO who wants a guaranteed 90-day payback and board approval, engineers worried about integration complexity and latency, and a security team that wants a SOC 2 Type II audit, penetration test summaries and a completed CAIQ questionnaire.
Pasting old notes into a prompt works for a couple of calls. After that it gets long and noisy, and the model can't tell which facts are still open. I wanted real agent memory: store what happened, recall the relevant parts, and reason across deals.
What the agent does
The Deal Intelligence Agent remembers every objection, stakeholder concern and commitment across a deal's sales cycle. It briefs the rep before the next call, drafts a personalized follow-up email, and learns which objection-handling approaches win across deals.
The backend is FastAPI, the LLM is Groq, the memory layer is Hindsight Cloud, and the dashboard has five tabs: Pre-Call Briefing, Memory Comparison, Follow-Up Email, Ingest Call and Playbook & Insights. At the top of the briefing is a switch between "Memory ON" (full Hindsight long-term memory) and "Memory OFF" (latest call only), so anyone can see what memory changes.
The design decision that mattered: two kinds of banks
Hindsight stores memory in banks, and how you split them decides what your agent can do. I used two kinds:
deal-{deal_id} one isolated bank per deal
playbook one shared bank across all deals
Each deal gets its own bank, so conversations, stakeholder observations and commitments stay siloed per customer. Nothing leaks from one prospect to another, and a brief can only draw on that deal's history.
The shared playbook bank collects outcomes: which deals were won or lost, which objections came up, and which strategies worked. That is where cross-deal learning happens.
With one bank per deal and nothing shared, the agent could never learn. With one big bank, a brief for one prospect could be polluted by another. Using both gave me precision and learning.
Each deal bank is created with a focused mission: track every objection, stakeholder concern, commitment, pricing discussion and competitor mention across a B2B sales cycle, and learn which objection-handling approaches lead to won deals. I also set a cautious, evidence-based disposition (skepticism=4, literalism=4, empathy=3), because I wanted the agent to stick to what was actually said instead of smoothing it over.
Retain, recall, reflect
Hindsight gives the agent three operations, and each does a different job.
Retain saves a call. It takes the raw transcript and extracts structured facts, a "When" date and the "Involving" people, instead of a lossy summary. When a deal closes, the outcome is retained into the playbook bank too.
Recall looks things up. Before it writes any brief, the agent runs four targeted queries against the deal's bank:
1. Open objections and blockers
2. Stakeholder stances and concerns (CFO vs. CTO)
3. Commitments, promises, and due dates
4. Commercial terms, pricing limits, and technical requirements
Recall returns grounded facts with the call they came from, so the LLM is writing from memory instead of guessing.
Reflect reasons over patterns. Against the shared playbook, the agent asks questions like which objection-handling strategies and pricing concessions win deals with skeptical CFOs, and it turns the answer into tactical recommendations for the next call.
On top of that, the playbook bank holds two mental models: CFO Budget & Payback Alignment (turn an upfront fee into amortized quarterly payments with a clear 6 to 9 month break-even) and Technical Risk Inoculation (answer integration and latency objections early with SOC 2 documentation and benchmark proof).
The LLM never sees the whole history. It sees what recall and reflect return, and it writes the brief from that.
What it looks like on one deal
The Northwind Logistics deal ($180,000, Proposal stage, four recorded calls) shows the result well. The brief is split into pieces a rep can scan in seconds.
Open objections. Three are tracked, each with who raised it and in which call: the annual fee exceeds the CFO's quarterly budget limits, integrating customized SAP tables could derail the engineering sprint, and compute overhead on Kafka brokers threatens stability.
Stakeholders and stances. Each person has a role, a stance and their concerns: the CFO is cautious, the engineering lead is concerned, the lead architect is skeptical, the sales engineer is supportive, and the executive sponsor is neutral.
Commitments. Each promise shows who made it and when it is due, such as custom ERP latency benchmark data due November 12 and the security documentation due November 20.
A playbook recommendation. This is the cross-deal part. For deals above $100,000, the agent advises delivering a clear ROI narrative by the fourth call to prevent early disengagement, and it cites its evidence: Apex Retail Technologies, a $120,000 deal that was lost after four calls despite multiple touchpoints.
Grounded facts, not guesses
Below the brief, the app lists every fact it recalled, tagged with the call number, the date and the people involved.
This became the most useful part for me. When the brief says the CFO needs a guaranteed 90-day payback, I can scroll down and see the exact fact from Call 3 behind it. It also makes the agent easier to debug: when a brief is wrong, I can see which memory misled it.
Memory on vs. memory off
With memory off, the agent sees only the latest call. It can write a reasonable brief, but it doesn't know who objected to what earlier or which promises are still open. With memory on, the app reports that it recalled grounded facts from previous calls plus the cross-deal playbook reflection, and the brief is built from them. Same deal, same button, very different brief.
Making it hold up
Because LLM calls fail in practice, the backend has unit tests for the cases I worried about most: LLM fallbacks, defensive JSON parsing, and empty-recall edge cases (a deal with no memories yet must not crash a brief).
What I'd tell someone building this
- Split memory by scope. Per-deal banks plus a shared playbook gave me isolation and learning at once.
- Store things you can act on. Objections, owners and promises with due dates are far more useful than raw transcripts alone.
- Show your evidence. Listing every recalled fact next to the brief builds trust and makes debugging easy.
- Make memory visible. One on/off switch shows the value in seconds.
- Expect repeats. In my recalled-facts list, the same budget objection appears from both Call 1 and Call 3, and the same infosec deadline from Call 1 and Call 4. They are accurate, but repetitive, and deduplicating them is the next thing I'd fix.
Try it yourself
The code is at github.com/abhishek18407-pixel/micro. To run the backend:
cd backend
uvicorn main:app --reload --port 8000
curl -X POST http://localhost:8000/admin/seed
You'll need a Hindsight Cloud key and a Groq key in backend/.env. To learn more about the memory layer, start with the Hindsight repository and the Hindsight documentation.
Top comments (0)