PRODUCT DESIGN / MULTI-AGENT AI / RAG

Cervello

Cervello

Cervello

Ask the company a question. Watch the team work. Get a sourced answer, or an honest “not in the data.”

Ask the company a question. Watch the team work. Get a sourced answer, or an honest “not in the data.”

Ask the company a question. Watch the team work. Get a sourced answer, or an honest “not in the data.”

A company brain for Al Dente that answers from the source, shows its work, and stays quiet when the fact is missing.

A company brain for Al Dente that answers from the source, shows its work, and stays quiet when the fact is missing.

A company brain for Al Dente that answers from the source, shows its work, and stays quiet when the fact is missing.

Role

Product design and full-stack build

Cervello answers only from Al Dente’s real data — and says so when something isn’t there.

The problem

Company questions cross systems.

Company questions cross systems.

Company questions cross systems.

Three systems hold the truth and none of them holds all of it. The answer to a normal question sits in a call recording, a production lot and a policy document at the same time. And some questions look normal but have no answer stored anywhere.

01

Does this complaint qualify for a return?

The call

The lot

The returns policy

02

Which semolina is in this SKU, and who supplies it?

Bill of materials

Inventory

Supplier record

03

What is the profit margin on this lot?

Not stored in any system

THE TRAP · THREE SHEETS, ONE SHAPE

PRODUCT SPECIFICATION SHEET

Penne Rigate n.73 — 500g box

PAS-PEN-500

The sheet the question means

PRODUCT SPECIFICATION SHEET

Penne Rigate n.73 Bio — 500g box

May contain: none

PRODUCT SPECIFICATION SHEET

Penne Rigate n.73 — 250g box

May contain: soy, mustard

Carton counts differ too. A nearest-neighbour search alone will quote the sibling.

A single chat box over a model fails this in three ways.

A single chat box over a model fails this in three ways.

A single chat box over a model fails this in three ways.

It blends the sheets.

Penne 500g, Penne Bio and Penne 250g carry opposite allergen and pack facts. The nearest neighbour is the wrong document.

It invents totals.

A plausible figure appears where an aggregate should have been computed from actual rows.

It answers a metric nobody stored.

Profit margin reads like a normal question. The field is not in any source, so a confident number is the worst possible output.

And the interface usually hides all of that behind a spinner.

How a question moves

One question. Five stages. Only the agents that actually worked.

One question. Five stages. Only the agents that actually worked.

One question. Five stages. Only the agents that actually worked.

A coordinator routes the question, specialist agents read only the systems it needs, and a verifier checks that every number and ID in the answer appears in the evidence. Two of these questions have an answer. Two of them do not.

Interactive — pick a question and watch it resolve, or refuse

Ask · pick a question and watch the team work
Understand
Route
Query
Cross-check
Verify
RosaCRM
BrunoERP / Production
EcoCall logs
AldoKnowledge base
MaestroCoordinator
VeraVerifier

The router is not a single point of failure. Entity IDs and keywords build the full plan first; a smaller model only confirms the vertical. If that call fails or returns bad JSON, the heuristic plan stands.

The product

Five screens, and every one of them can be checked.

The question box, the map of the company, the document drawer and the cast that reads them.

The knowledge graph over the document library. Filters, search, and labels that stay hidden until hover.

The cast, over a cited answer. Only the agents that contributed stay lit once it resolves.

What it does

Four verticals behind one question box.

Four verticals behind one question box.

Four verticals behind one question box.

Each specialist reads only what its question needs. Nothing fans out across every system by default.

Rosa

Rosa

CRM

Customers, open opportunities, orders, invoices and channel totals.

Bruno

Bruno

ERP / Production

Inventory against minimum stock, bills of materials, suppliers and production lots.

Eco

Eco

Call logs

Complaint metadata first. A transcript search only when the metadata does not already hold the asked fact.

Aldo

Aldo

Knowledge base

Specs, allergens, shelf life, wholesale prices, the returns policy, HACCP, recall and related documents.

RESPONSE CONTRACT · ONE QUESTION, END TO END

18s

18s

18s

Design target

Where a normal answer should land.

25s

25s

25s

Internal deadline

The lane gives up and returns what it has.

30s

30s

30s

Hard contract

Nothing is allowed to run past this.

It also builds the deliverable from the same facts.

It also builds the deliverable from the same facts.

It also builds the deliverable from the same facts.

An inline HTML sales deck, or a downloadable PDF, PowerPoint, Word or Excel file, branded with the Al Dente mark. A prospect with no orders is written as “no records”, not filled in. An unknown customer and a missing metric both produce no file at all.

HTML deck

PDF

PPTX

DOCX

XLSX

Retrieval

Thirty-five documents, and several are near-duplicates on purpose.

Thirty-five documents, and several are near-duplicates on purpose.

Thirty-five documents, and several are near-duplicates on purpose.

Every shape has a base 500g sheet, a Bio 500g sheet and a 250g sheet, and the facts disagree. Retrieval is built around that trap rather than around average-case similarity. Turn the stages off below and watch the wrong sheet win.

Interactive — switch the retrieval stages off and watch the wrong sheet win

Retrieval · conceptual ranking, not live scores
AskFor Penne Rigate n.73 Bio — 500g box, what is declared under “may contain”?
EXACT IDS — ALWAYS FIRST, BUT THIS QUESTION NAMES NO SKU, LOT OR DOC ID
Turn the stages on one at a time and watch the candidate set move.
1
Spec sheet — Penne Rigate n.73 — 250g box## Allergens
2
Spec sheet — Penne Rigate n.73 — 500g box## Allergens
3
Spec sheet — Penne Rigate n.73 Bio — 500g box## Allergens
4
Wholesale price list## Wholesale prices
5
Returns and Quality Complaints Policy## Returns
Sibling quotedWrong sheet. The answer would declare soy and mustard on a product whose own sheet declares none.

Hyphen-aware tokenizer

BM25 keeps PAS-FUS-500 as one token and also splits it, so a SKU survives the search either way.

Embeddings shipped, not built

4096-dimensional vectors are computed once and ship with the app. The first question never pays to embed the corpus, and health checks never block on it.

Ambiguity beats a guess

If a question names a shape and still matches more than one sheet, the lane flags the ambiguity instead of picking a sibling. Superseded and draft lines are penalised so a cancelled figure is never the citation.

The company as a graph

A customer connects to a lot, through an order, through a product.

A customer connects to a lot, through an order, through a product.

A customer connects to a lot, through an order, through a product.

A bounded crawl of customers, suppliers, products, raw materials and production lots. It is built once and cached, so it never runs inside a graded question. Filter it, search it, or pulse the slice one answer actually touched.

Interactive — filter it, search it, or light up the slice one answer touched

241 nodes · 349 edges · crawled once, cached, never rebuilt inside a question

The AI layer

Models where language is required. Code where a wrong digit is expensive.

Models where language is required. Code where a wrong digit is expensive.

Models where language is required. Code where a wrong digit is expensive.

Four models, four jobs. None of them is asked to do arithmetic, and only one of them is allowed to write a sentence.

Route confirmation

Qwen3 27B

A cheap JSON confirm of a plan the code has already built.

Embeddings

Qwen3 Embedding 8B

4096-dimensional semantic rank, fused beside BM25.

Rerank

Qwen3 Reranker 4B

Reorders a short candidate list, nothing more.

Synthesis

Llama 3.3 70B

Prose only, constrained to a JSON answer field so a thinking process cannot leak into the graded text.

Where the model does not get to speak at all.

Where the model does not get to speak at all.

Where the model does not get to speak at all.

Synthesis is skipped entirely for honest abstentions, for metric traps, and for single-field facts that code can state exactly. Temperature is 0, calls are capped at four in flight and retried with backoff, and a hard failure becomes an abstention rather than a 500.

Honest abstentions

Metric traps

Single-field facts

Temperature 0

4 calls in flight

Retry with backoff

Confidence is arithmetic, not a vibe.

Confidence is arithmetic, not a vibe.

Confidence is arithmetic, not a vibe.

Four signals are weighted, with grounding heaviest at 0.40. The ring on screen is that score, and the hover breakdown is the same four numbers. Move them.

98Conf
High confidence
Four signals, weighted · grounding heaviest
Grounding99 × 0.40
How much of the answer was found verbatim in the evidence.
Agreement across sources97 × 0.20
Whether the sources that were read say the same thing.
Retrieval strength96 × 0.20
How confidently the right documents or rows were pinned.
Verifier composite98 × 0.20
What the verifier made of every number and ID in the draft.

The number on screen is this arithmetic, not a second model’s opinion. Gold at 80 and above, heat below it, and an explicit abstention state when there was nothing to ground.

Design system

Semolina gold on near-black. One accent family, and one colour rule.

Semolina gold on near-black. One accent family, and one colour rule.

Semolina gold on near-black. One accent family, and one colour rule.

The visual system is Al Dente, not a generic AI theme. Three reading levels, one hue for every state the product can be in, and colour that means “data type” reserved entirely for the graph. It cycles its own states below.

Playing by itself — four states, one hue, the stylesheet rewriting itself

High confidence
Rigatoni n.24 — 500g box
New question98 CONF
Primary action · Maestro · a grounded answer
cervello.css

Inter for the interface, JetBrains Mono for IDs, paths and counts. Radii at 14, 20 and 28, concentric so a nested element is always smaller than the surface holding it. Two very quiet radial washes give the black field temperature without lifting the content off it.

Design decisions

Six problems, and what I built instead.

Six problems, and what I built instead.

Six problems, and what I built instead.

Each of these started as something that did not work.

FIG 0.1

Make the agents legible.

Make the agents legible.

Make the agents legible.

Six characters had to read as one team, and the loop that plays while an agent works is video — and video has no alpha channel, so every mascot arrived sitting in a black box. Generating the six from one robot kept them a family; sitting the loops on black with mix-blend-mode set to lighten drops the black and keeps the light, so a mascot floats instead of sitting in a cut-out.

FIG 0.2

Show the pipeline as a picture.

Show the pipeline as a picture.

Show the pipeline as a picture.

The first pass ran five differently coloured beams into the coordinator and read like a network diagnostic. One warm gold family now holds the entire working state: source agents on a wide top row, beams falling and converging on Maestro, Vera beside the coordinator. The loader names the phase in its own lane, so the cast never has to double as a progress bar.

CRM

98

CUST-0132 has 4 open opportunities, totalling 740,000 EUR.

crm/opportunities

crm/opportunities

crm/opportunities

FIG 0.3

Put trust next to the sentence.

Put trust next to the sentence.

Put trust next to the sentence.

Confidence, citations and the answer started as separate panels — a reader could finish the sentence and never reach the evidence. They are one cluster now, and every chip names the endpoint or document it came from. The bento underneath is evidence rather than decoration: nodes touched, sources, calls made, bytes moved, and who worked.

FIG 0.4

Brand the output, not only the app.

Brand the output, not only the app.

Brand the output, not only the app.

A deck leaves the product and gets forwarded, and unbranded it stops looking like it came from the company. Every artifact carries the Al Dente mark and a footer, and the same discipline as the answer applies to the file — a prospect with no orders is written as “no records”, and a request for a PDF of a missing metric writes no file at all.

What is the shelf life (TMC) and the declared allergens for Spaghetti n.5 …

What is the shelf life (TMC) and the declared allergens for Spaghetti n.5 …

What is the shelf life (TMC) and the declared allergens for Spaghetti n.5 …

→

One moving stroke on the whole page. Everything else is hairline and type.

FIG 0.5

Hand-author the borrowed components.

Hand-author the borrowed components.

Hand-author the borrowed components.

Vanish input, hover border, bento grid, step loader and the beam effect are Aceternity patterns. Pulled in as a dependency they arrive with their own palette and their own motion, so each one was copied into the repo and retokened. The moving gold stroke survives in exactly one place — the border around the composer — where it marks the only thing you are meant to type into.

FIG 0.6

Graph as data viz, UI as brand.

Graph as data viz, UI as brand.

Graph as data viz, UI as brand.

Five entity colours are necessary on the map and poisonous everywhere else, and a hundred lot IDs as always-on labels made it unreadable. Product chrome stays in the gold and ink system, the five colours appear only on nodes, and lot and customer labels stay hidden until hover.

Engineering choices

Six decisions that keep the numbers honest.

Six decisions that keep the numbers honest.

Six decisions that keep the numbers honest.

01

Facts before prose

Channel totals, complaint counts, stock against minimum and bill-of-materials chains are computed in code. The model writes language around numbers it did not calculate.

02

JSON synthesis

Free-form completions leaked a thinking process into the answer. Constraining the model to a JSON answer field closed that, and a placeholder echo falls back to the deterministic lane answer.

03

Always 200

Empty bodies, bad JSON, timeouts and missing keys all abstain inside a valid envelope. Neither the evaluator nor the interface ever has to handle a 500 for a bad question.

04

One service

The React app builds into the FastAPI static folder. Production is a single Railway service in the EU, with no Node process. Dev proxies /ask and /api to the API.

05

Graph off the hot path

The company graph is crawled once, cached, and served from its own endpoint. It never runs inside a graded question.

06

Call discipline

Calls are read from summary, topic and related lot before any transcript is downloaded. A transcript search is one surgical query, used only when the metadata lacks the asked fact.

Result

The recovery is the result.

The recovery is the result.

The recovery is the result.

A platform dry-run before the grounding pass scored 15 on 16 questions, with ERP and call logs failing on invented or missing facts. The fix was structural rather than cosmetic: lot and inventory handlers, deterministic field answers, value-line snippets, and a verifier that can replace an ungrounded number with the deterministic lane answer.

Before · platform dry-run

15 / 16

15 / 16

15 / 16

Scored on the platform, before the grounding pass.

ERP and call logs failed on invented or missing facts.

A plausible number appeared where no field existed.

After · local harness

280 / 280

280 / 280

280 / 280

28 cases, built from real API rows and knowledge-base documents, scored locally.

Every vertical positive. No wrong answers.

No refusals on questions that did have an answer.

All of them under 8 seconds.

The 280 is a local, judge-style harness — a process result from my own evaluation, not a score signed off by a public judge. It is here because it is what the grounding pass was measured against.

The model is allowed to speak. It is not allowed to invent the company.

The model is allowed to speak. It is not allowed to invent the company.

The model is allowed to speak. It is not allowed to invent the company.

Cervello treats a company question as a retrieval and verification problem with a face. Everything on the screen — the cast, the ring, the citation chips, the graph — exists so a reader can check the sentence instead of trusting it.

EXPLORE ANOTHER PROJECT

The Back Office

The Back Office

The Back Office

©2025 mob! design

©2025 mob! design