Roberto Bolgheroni

In production

AI engineer building production agent systems.

Full-stack engineering underneath — I ship agents that people depend on daily: voice, support, and context-aware platforms running in production.

2,000+
conversations per day at peak
55–60%
of contacts resolved end to end
~3%
conversion on cold leads, by voice Fully autonomous outbound — no human on the dial.

01 Selected work

Flagship project Case 01

Context-aware agent platform for wealth management

Mavericks.AI — wealth managers and investment advisors

Problem

Advisors lose hours every week writing up meetings and reassembling client context scattered across WhatsApp voice notes, transcripts, and financial feeds.

What I built

An end-to-end platform that ingests unstructured data, runs automated analytics pipelines, and serves context-aware agents for real-time advisor support. Calendar-integrated agents join scheduled meetings on their own via Recall.ai, record, and trigger webhook-driven async processing. The engineering core: the agent is wired into every backend route through a monorepo with an automatic integration generator, plus a query-structuring layer on top. Pagination, summarisation, and structured tools give the model clean inputs and outputs. It is not a dump of the system into context — it is structured, real-time digestion of the system's data.

How the platform digests context

// unstructured in, structured out

A · Sources

  • WhatsApp voice notes
  • Meeting transcripts
  • Financial feeds

scattered · unread · unlabelled

B · Ingest

calendar-triggered

Agents join the scheduled meeting on their own via Recall.ai and record it.

webhook → async queue

processing off the request path

C · Structured layer

monorepo

automatic integration generator · every backend route

  • GET tool
  • GET tool
  • GET tool
  • POST tool

…generated, not hand-wired

query-structuring layer

pagination · summarisation · structured tools

clean inputs and outputs for the model

D · Agents in the product

  • Meeting analysis

    Agents join the scheduled call on their own, record it, and turn the transcript into client insights and CRM action items.

  • WhatsApp conversation analysis

    Voice notes and client threads are ingested and digested into structured context instead of sitting unread in a chat history.

  • In-product advisor support

    Agents answer inside the platform with real-time, structured access to every backend route — queries, pagination and tools, not a context dump.

  • Relationship briefings

    Before each meeting, a briefing on the client and the relationship: what moved, what was said, and what is still open since the last interaction.

→ Advisor 3–4 insights and CRM items per meeting ~6–7 h of write-up saved a week context arrives digested, not dumped

Stack

LangGraph · LangChain · Python · FastAPI · TypeScript · Next.js · PostgreSQL · MongoDB · Recall.ai · Docker · GCP · LangSmith · LangFuse

Result

3–4 client insights and CRM action items generated per meeting, saving an active advisor an estimated full workday a week (~6–7 h) of manual write-up.

Case 02

Autonomous voice agent for cold outreach

Mavericks.AI — financial products

Problem

Manual outbound does not scale and converts poorly. Every hour a closer spends dialing unqualified numbers is an hour not spent closing.

What I built

A VoIP agent that calls cold leads on its own, qualifies them in conversation, and routes approved contacts to human closers, sustaining 100+ concurrent calls. Full pipeline tracking with conversion metrics, so the funnel is measured rather than guessed.

Live call line 47 of 112 · 00:42 · qualifying
voice agentprospect

now · checking: budget and timing

Qualify in conversation

  • right person reached
  • product fit stated
  • budget and timing
  • interest confirmed

// example call, not a capture · disqualified leads never reach a closer

From cold list to a closer's calendar

// 100+ concurrent calls, unattended
  1. 01

    Cold list 8,000+ leads processed

    unqualified until someone dials

  2. 02

    Scheduler

    Cloud scheduling paces the list and refills slots as calls end.

  3. 03

    Dialer 100+ concurrent

    calls placed without a human on the line

  4. 04

    Human closers

    Only approved contacts are routed through, so closing time goes to people who qualified.

    handoff carries: transcript · answers · qualification reason

Pipeline tracking

  1. dialed
  2. reached
  3. approved
  4. closed

~3% conversion on cold leads · 200+ prospects called per day

// only the two ends are published; the stages between them are tracked, not disclosed

Stack

Vapi · Python · FastAPI · cloud scheduling · analytics layer

Result

~3% conversion on cold leads, at 200+ prospects called per day and 8,000+ leads processed.

Case 03

Customer-service agent at scale

Mavericks.AI — healthcare

Problem

High volume of repetitive tickets consuming hours of the support team every day.

What I built

An autonomous support agent with context retrieval, wired into the client's backends for user-database queries and account operations. Its knowledge base improves itself: every conversation transferred to a human was analysed to close the coverage gap that caused the transfer, so resolution climbed over time.

One front door, six teams behind it

2,000+ · conversations on a peak day
55–60%
resolved end to end
40–45%
routed to a named team
6
teams, one entry point
31% → 58%
resolved share, week 1 to week 12

instant messaging

↑ click a message to trace its route

Example intents, not transcripts. All of them arrive on the same thread.

support agent

Reads the client's own systems, answers what it can, and decides who owns what it cannot close.

  • knowledge retrieval
  • user database
  • account operations
  • routing

how the routing decision is made

coverage
The agent has resolved this intent before, from sources it can still reach.
permission
The action needed is one it is allowed to perform on the account.
ownership
Anything legal, or outside those two, goes to the team that owns it, with the transcript attached.

routed to the responsible team

40–45%
  1. Accounting 30%
  2. Payments 21%
  3. App support 18%
  4. Corporate 13%
  5. Tax 11%
  6. Other 7%

Shares of the routed half. The volume behind them belongs to the client.

gap analysis

Each routed transcript is read back to name what the agent was missing.

knowledge base

The gap is written back, so the same question resolves itself next time.

resolved share, week by week

week 1 · 31%week 12 · 58%

what the loop moved first

Payments
Duplicated payments were the single largest cause of transfer. Once the agent could read the payment ledger and issue the reversal, the intent resolved on its own.
Accounting
Deadline and document questions were answered from stale text. The knowledge base was rebuilt per regime, so the answer now depends on the client's own setup.
Corporate
Still routed on purpose: a change of partners is a legal act, and the agent's job there is to collect the documents before a human takes over.

Routing accuracy matters as much as resolution: a conversation the agent cannot close still arrives at the right desk with its transcript, its retrieved context and the account state attached.

Stack

Python · FastAPI · LangChain · LangGraph

Result

2,000+ conversations per day at peak, 55–60% resolved end to end.

02 In production

Every run writes its own record — step by step, call by call, token by token. Those records roll up into one view where spend is attributed to the step that caused it, so an optimisation can be chosen instead of guessed at.

1Every run records itself

one run · example figures
analysis_pipeline succeeded 9 steps · 204.0 s
  1. load_input 120 ms
  2. load_history 40 ms
  3. enrich 12.4 s
  4. summarize 13.9 s
  5. analyze 46.6 s
  6. plan 128.4 s
  7. join 40 ms
  8. commit 60 ms
  9. publish 2.4 s

step that made model calls plumbing

A regression has a location before anyone opens a log: the step that slowed down is named, timestamped and comparable to yesterday's run.

Cost is metered where it happens — per call, on a named step — so it can be added up any way later: by run, by step, by model, by pipeline.

2One view over every run

30-day window
~900
Runs in the window · ~30 a day
~3,300
Model calls · 3.5 per run
~$0.07
Average cost of a pipeline run
<$0.02
Average cost of a model call
79%
Of all tokens are input
Haiku 4.5
Dominant model · 55% of cost

daily cost · day 1 → day 30

// shape only — no amount is printed, because absolute spend belongs to the client

A model swap or a prompt change shows up as a step change in the curve, which is how an experiment gets measured instead of argued about.

3Where the spend goes

per step and per pipeline
  1. meeting_analysis / tasks_analysis 30%

  2. meeting_analysis / parsing 22%

  3. financial_movements_analysis / risk_analysis 18%

  4. meeting_analysis / summary 13%

  5. financial_movements_analysis / churn_analysis 11%

Five steps out of dozens carry 94% of the bill. Optimisation work goes to those five, and displaying each one as pipeline / step is itself the proof: attribution is per step, not per application.

4Which lever to pull

token profile per step — input : output
  • 1:1

    parsing

  • 3:1

    tasks_analysis

  • 13:1

    customer_analysis

  • 35:1

    summary

The ratio names the lever. 35:1 is a context problem — cache it. 1:1 is a generation problem — shorten the output or move the step to a cheaper model.

calls versus cost, by model · the inversion

Calls 35%42%22%
Cost 55%25%20%

Haiku 4.5 GPT-5 mini Sonnet 4.5

The model with the fewest calls is not the cheapest one: it holds the context-heavy steps. Without per-step attribution that inversion is invisible and the obvious optimisation is the wrong one.

Tested

// runs on demand
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20

20/20 scenarios pass · All must pass, or the change stops here.

At least twenty scenarios cover the customer-facing agents. The suite runs on demand, and a change only reaches a person once every scenario has passed.

Outputs are asserted two ways: regex where the output has structure, an LLM judge where it is prose. Real production failures are promoted into the suite alongside the good paths, so a defect that happened once becomes a permanent test case.

03 How I work

200

PRs a week

50–65 h

engineer-hours a week on the preliminary pass alone

AI makes a team produce a massive volume of code. Ten-plus engineers opening around four PRs a day is 200 PRs a week; at 15–20 minutes of careful review each, that is 50 to 65 engineer-hours a week on the preliminary pass alone. Without tooling that carries the subjectivity of your own environment, you either pay that cost or you review badly.

So I built development-process automation on Claude Code: domain-specialised review skills, code writing that follows the environment's conventions, automated quality-test gates, and generated documentation. The thesis underneath it is that company culture has to exist as documentation, and project history has to be documented and continuously referenced — otherwise the agent has nothing to be faithful to.

Stack

Claude Code · custom skills · CI/CD

Result

Adopted by every engineer on the team, absorbing the preliminary pass over a flow of 200 PRs a week, so human review time goes to design decisions instead of scanning.

04 Experience

  1. Jul 2024 — present

    Full-stack / AI Engineer · Mavericks.AI

    Lead AI engineer across three production AI products, architecture through deployment, for the financial and healthcare sectors.

    • LangGraph
    • LangChain
    • Python
    • FastAPI
    • TypeScript
    • Next.js
    • Vapi
    • Recall.ai
    • PostgreSQL
    • MongoDB
    • Docker
    • GCP

    shipped here → Case 01 · wealth platformCase 02 · voice outreachCase 03 · support agentHow I work

  2. Apr — Jun 2025

    Frontend Developer (contract) · OceanGuard — Netherlands

    Live telemetry dashboard for an international maritime platform. TypeScript, Vue, Nuxt.

    • TypeScript
    • Vue
    • Nuxt
  3. Sep 2022 — Jul 2024

    Software Engineer · AdaTech — EdTech

    Enterprise ERP with embedded BI tooling, and distributed REST APIs on AWS built on microservices principles.

    • AWS
    • REST APIs
    • microservices
  4. Jan — Aug 2022

    Software Engineer · IntuitiveCare — healthcare finance

    High-throughput features for a financial automation platform serving large healthcare institutions.

Stack · what I reach for, and what I have shipped with

05 About

I build AI systems that run in production and stay up.

Most of my work is agents: voice agents that hold a real conversation, support agents that resolve rather than deflect, and platforms where an agent has structured, real-time access to a live system rather than a pile of scraped context.

Underneath the AI work is ordinary full-stack engineering, and I think that is the part that makes agents survive contact with production. Python and TypeScript, FastAPI and Next.js, Postgres and Mongo, Docker, AWS and GCP, CI/CD and monitoring — the unglamorous layer that decides whether a demo becomes a product.

I hold a Computer Science degree from the University of São Paulo, where I also built SPIRA — a microservices ML system detecting respiratory insufficiency through acoustic voice analysis, in PyTorch, Airflow and MLflow. In September 2026 I start an M.Sc. in Artificial Intelligence at the University of Bologna.

Let's talk

Email → LinkedIn ↗
WhatsApp// ai agent: coming soon
Roberto Bolgheroni · AI & Backend Engineer robertobolgheroni@gmail.com