Did we charge every customer the right price? The Brain checks all of them.
An insurance company has a price list (the rate tables) and a rule book that says how to add the prices up. It also has a record of what every customer was actually charged. The Brain does the math again for every customer, the way the rule book says, and points at every bill that is wrong: which step went wrong, why, and what to do about it. It never changes a price itself.
Test 400 bills, 82 with a hidden mistakeFound all 82, no false alarmsReason named 80 of 82Language model llama3.2:3b on a laptop (any model fits)Screens real, from the live app
What this job does
Check the math on every bill, before a customer or an inspector does.
Think of a restaurant with a menu and a cashier. Sometimes the cashier uses last year's menu, skips a discount, or types the wrong table number. The bill is wrong, and nobody notices for months. Insurance companies have the same problem with thousands of bills. The menu (the rate tables) and the recipe (the rule book) are already in the building. Someone just has to redo every bill and compare.
In goes
The price tables, the rule book, the list of what was charged, and the computer's own scratch work for each bill
→
Out comes
For every bill: "correct", or "wrong at step 2, because a discount was skipped, worth $117.72, send to a person"
Who uses it: the people who set prices and the people who check the company's work. How much it may do alone: at first it only reports. Later it may open a ticket. It never changes a price.
The Brain screen in the app. One row per job. For this job: 411 folders, 4,941 facts, 1,128 signed decisions. (The demo account is named after a counseling practice; the job inside it is the insurance one.)The picture
Eight stops, in a line. Papers go in on the left; answers come out at the bottom.
The same parts do the other job too (writing test rules for software). What makes this one about prices is a set of settings, like a recipe card, not different machinery.
01The front door only stamps the file and guesses what it is. It decides nothing.
02Reading is done by recipe cards. The same card reads any price table that has a title row, some key columns, dates and a price.
03Memory never erases. A new price gets a new sheet with a new date. The old sheet stays, with the date it stopped being true.
04Judgment is math first. Redoing the bill is arithmetic. Naming the reason is a rule. The language model is only a backup.
05The notebook is the real product. Every number a person sees points to a signed line, and that line points to a cell in a file the company handed over.
Why HomeGrwn?
Because it grows models from your own data, on computers you own, with any language model you choose.
HomeGrwn is the product the Brain runs inside. Its job is to turn a company's own records into models that belong to that company: rules with versions today, trained helpers per question once there are enough labels. The language model that writes the words is your choice. The tests on this page used a small open model on a laptop; a bigger model with your own API key plugs into the same slot, because the writer never decides anything. Here is where each part of the rate validation job actually ran.
01Models made from your data, for you. The rules, the memory and, in time, the trained helpers are built from your own records and belong to you. The files are read on a computer in your building, and the whole app can run there too.
02Any language model. The writer slot takes a small open model on your own computer or a big one with your own key. It never decides, and the filter checks its words either way, so you can swap it without changing the answers. On a laptop, this job ran with a 2 GB model at no cost per question.
03No engineers needed. Download the connector, approve it in your browser, drop files or connect Jira, click yes. The built-in agents do the rest.
04Settings, not code. A job is a template of rows with versions. The same software checked prices and wrote test rules; a hospital or a bank job is another template.
05Proof built in. A notebook that cannot be erased, a filing cabinet you can ask about any date, and a practice test with a score. You can show an auditor.
06It learns from your people. What your reviewers change and what your tickets say comes back as lessons, and a new rule version goes live only if it is better.
The data
Five files, exactly as the company keeps them.
Nobody cleaned anything up first. The test files were made by a generator we wrote so we would know the answers. They look like real company files, but they are not a real company's files.
File
What it is
Size
Who keeps it in a real company
PA_Rate_Tables_v2024.1.xlsx
Car insurance price list, 5 sheets
12 KB
Actuarial, in Box or SharePoint
HO_Rate_Tables_v2024.1.xlsx
Home insurance price list, 3 sheets
7 KB
Actuarial
PA_HO_Rating_Manual_v18.md
The rule book, in sentences
1 KB
Product team, in Confluence
PL_POLICY_TERM_extract_2024.csv
400 bills: customer details, price paid, notes
26 KB
The data warehouse team
PC_rating_worksheets_2024.jsonl
The computer's scratch work per bill
40 KB
The policy system (Guidewire PolicyCenter)
A peek inside
Price table (car, "Comp Base") Area Car type From Until Price
101 8 2023-07-01 2024-01-01 0.0192
101 8 2024-01-01 (still good) 0.0203
List of bills
bill, kind, date, area, car, deductible, driver, home policy?, ..., paid
PA-2024-118000, car, 2024-08-04, 115, 10, 500, A, yes, ..., 190.57
HO-2024-220011, home, 2024-04-26, ..., roof age 22, wind 2%, house 250000, ..., 682.19, note: "Retention credit -15%"
Scratch work
{"bill": "PA-2024-118000", "step 1": 0.0236, "step 2": 0.02006, "step 3": 0.02006, "step 4": 0.019057}
What happened to each file
From a file on the shelf to facts in folders, one file at a time.
Every file took the same trip: the front door stamped it and guessed what it was; a person said yes; a recipe card cut it into pieces; each piece became facts; each fact passed six checkpoints; the facts were filed in folders. Here is that trip for each of the five.
PA_Rate_Tables_v2024.1.xlsx
The price list for car insurance: five sheets (Comp Base, Coll Base, Deductible Factor, Driver Factor, Multi Policy). Each row: this area, this kind of car, this price, good from this date until that date. A title row sits above the real header.
1 · Front door's guessprice table (rate_cell) · recipe rate_table_xlsx · version 2024.1 read from the name · sureness 13
2 · Recipe carda grid with keys: Territory and Symbol are the key, Effective is “good from”, Expires is “good until”, Rate is the value
3 · Pieces234 rows
4 · Facts234 price facts
5 · Filed in5 folders, one per sheet
6 · Checkpointskey complete · no two prices for the same key on overlapping dates
HO_Rate_Tables_v2024.1.xlsx
The price list for home insurance: Cov A Base by protection class and construction; Roof Age Factor as a from-to range; Wind Deductible Factor keyed by words (1%, 2%, 5%).
1 · Front door's guessprice table (rate_cell) · recipe rate_table_xlsx · version 2024.1 · sureness 11
2 · Recipe cardsame grid recipe; Roof Age From and Roof Age To become one range key
3 · Pieces38 rows
4 · Facts38 price facts
5 · Filed in3 folders, one per sheet
6 · Checkpointssame two checks
PA_HO_Rating_Manual_v18.md
The rule book, in sentences: which table to read, which factors to multiply in which order, round once at the end, minimum premiums.
1 · Front door's guessrule book (rule) · recipe rating_manual · version 18 · sureness 3
2 · Recipe cardparagraphs, with the heading path kept
3 · Pieces5 paragraphs
4 · Facts14 rule facts, one per sentence
5 · Filed in3 folders, one per manual section
6 · Checkpointsnone fail; the math steps were written from these sentences and approved as rule version 4
PL_POLICY_TERM_extract_2024.csv
The list of bills from the data warehouse: one row per customer. Car and home share one wide layout, so half the columns are empty on every row. Includes what was paid and any manager note.
1 · Front door's guesscustomer details (policy_attr) · recipe warehouse_terms · version 2024 · sureness 15
2 · Recipe cardone folder per row; each non-empty column becomes a fact on that folder
3 · Pieces400 rows
4 · Facts2,815 customer-detail facts + 400 price-paid facts (empty cells make no fact)
5 · Filed in400 folders, one per bill
6 · Checkpointsvalues checked against each fact type (number, text, date)
PC_rating_worksheets_2024.jsonl
The computer’s scratch work: the number it had after each step of the math, one record per bill.
1 · Front door's guessscratch work (system_step) · recipe pc_worksheet · version 2024 · sureness 3
2 · Recipe cardone record per bill, joined to the same folder by the bill number
Two agents did the reading. A person only clicked yes.
HomeGrwn ships these agents; nobody wrote anything for this company. They work from the recipe cards in the job's settings.
The front-door agent (the manifest)
It looks at three things: the file ending (.xlsx, .csv, .md, .jsonl), words in the file name ("Rate_Tables", "Manual", "worksheets"), and the first row (the header). Each recipe card lists the hints it expects. The agent scores every card against the file and proposes the best one, with the score shown so a person can judge. It also reads the version out of the name (v2024.1 → 2024.1) and checks whether an earlier version of the same file is already on the shelf.
The reader agent (the recipe cards)
Three readers, no insurance knowledge. The grid reader finds the real header under a title row, decides which columns are the key, which are dates and which is the value, by their names ("Rate" or "Factor" wins as the value; "Effective" and "Expires" become the dates; a "From / To" pair becomes a range). The row reader makes one folder per row and one fact per filled cell. The paragraph reader keeps the heading path and makes one fact per sentence.
The six checkpoints
Checkpoint
What it asks
If it fails
ingest
Did the piece come from a sealed original with a location?
The fact is held back with the reason, and a person sees it on the Sources screen. They can correct the value or let it go; either way it is written down.
validate
Is the value the right kind (number, text, date)? Is the key complete?
standardize
Dates as dates, "Y" as yes, numbers as numbers.
resolve
Does the name match something we already know (a table, a system)?
test
Job-specific checks: no two prices for the same key on overlapping dates.
publish
Is this fact new, or the same as one already filed?
The Sources screen, live. Bottom: the first drop of five files, each with the agent's guess, the header it saw, and the recipe it picked (score 3 to 15). Middle and top: two later drops used in the versions section below. Quarantine: nothing held back.Where it is kept
The originals on a shelf. The facts in a database. The notebook next to them.
Shelf
What is on it
This job
Where exactly
Original files
The file exactly as it arrived, sealed with a fingerprint (a hash)
5 (+2 later)
disk, one folder per company and per drop, write-once
Pieces
One row or one paragraph, with a note of where in the file it came from
1,077
Postgres table chunks
Facts
One true thing, with its type, value, sureness, dates, and the piece it came from
4,941
Postgres table facts
Folders and versions
One per bill and per price table; a version closes when the facts change
411
Postgres tables items, item_versions
Held facts
A fact that failed a checkpoint, waiting for a person
0
Postgres table quarantine
The notebook
Every decision, signed, with the rule version and the facts it read
1,128
Postgres table decisions, append-only
Vectors
Map pins for the rule book's sentences, names hidden
as needed
Postgres with pgvector, table chunk_vectors
The vault
The real values behind hidden names, locked with a key
as needed
Postgres table vault, encrypted
Settings
Recipe cards, math steps, reason rules, limits, with versions
48 rows · 4 rule sets
Postgres tables job_config, rule_versions
One bill's folder, live (HO-2024-220159). Eleven facts: seven customer details and the price paid from the bill list (source: Sheet1 › row 401), three scratch-work steps from the worksheet file (record 400). Every fact says when it became known and where it came from. Below: the six decisions about this bill, which found a typing mistake worth $1,316.98.Versions and twins
Nothing is overwritten, and the same thing is never filed twice.
Three real drops on the live app show the three cases a company hits: new files, the same content sent again in a fresh file, and the very same file sent twice.
Drop 1 · five new filesOct 21. 5 files → 1,077 pieces → 4,941 facts → 411 folders.read
Drop 2 · same prices, new fileOct 22. The car price table was regenerated, so its bytes differ but every cell is the same. The front door let it in (new fingerprint). The reader cut 234 pieces and published 0 facts: all 234 already existed. The 5 table folders were checked and left as they were.read · 0 new
Drop 3 · the very same fileOct 22. The identical bytes again. Refused at the front door: "duplicate · same bytes as ev_332b7ae185". Nothing to read.refused
How a fact knows it is a twin
Each fact gets a fingerprint made from its folder, its type, its name, its slot and its value and start date. The slot is the thing a price is about (the key and the start date). Two facts with the same fingerprint are one fact, however many files repeat it. A price with the same key but a new start date is a new fact that replaces the old one: the old one gets an end date, and both stay.
Four kinds of version, all visible in the app
What
How a change works
In this job
A file
Each file is sealed with a fingerprint; a newer file with the same name is marked as superseding the older one
5 originals, plus the two drops above
A fact
Never edited. A new value is a new fact that replaces the old; the old keeps its end date
4,941 facts, 0 replaced yet
A folder
When a folder's set of facts changes, version N closes and N+1 opens, with the drop that caused it
411 folders, all at version 1
The rules
A rule set is a numbered, dated, hashed file; a person approves it; every decision names the version it used
v1 next-action rules · v2 reason rules · v3 starter math (proposed, never approved) · v4 the math from manual 18 (approved, in force from 2023-01-01)
A setting
Changing one row closes its version and opens the next; the row remembers whether it came from the template or was changed
48 live rows in 13 sections
The job screen, live. The four rule sets with their status, who wrote them, their notes and their fingerprint. Version 3 (the starter math) was never approved; version 4 (the real math) is what every decision used.Memory: by folder, by date
Not a copy of the files. A filing cabinet where every sheet has a date and a source.
Each bill has a folder. Every fact about that bill, from any file, goes in that folder. A price table has a folder too; its prices are sheets with "good from" and "good until" dates. When the Brain asks a question, it always asks "as of which date?", and Memory answers with what was true then.
One folder per bill. The bill, the customer details and the scratch work all go in the same folder, because they share the bill number. Reading a file never makes a second folder.
Every sheet has a date. So "what did we know about this bill on 26 September 2024?" is a simple question. The bill's page in the app has an "as of" date box for exactly this.
Every sheet says where it came from. A fact points to the piece of the file it was read from, like "Comp Base sheet, row 57". A finding is a chain of pointers back to the company's own file.
Nothing is erased. A new price is a new sheet. The old sheet gets an end date. Corrections, rule changes and setting changes all work the same way.
Vectors and the vault
A map where similar sentences sit close together. It helps find things. It never decides a price.
A vector is a long list of numbers that works like a pin on a map. Two sentences that mean nearly the same thing get pins that are close to each other. The Brain makes one pin per piece of text, after hiding any names, and keeps the pins in the database next to the facts.
What gets a pin here. The sentences of the rule book and the notes in the price lists. Prices themselves do not get pins. A price has a key (area, car type), and keys are looked up, not searched.
What the pins are for. When the Brain says "the roof-age discount was skipped", the Voice can find the rule book sentence about roof age and quote it. When someone writes a new math step, the app can find the paragraph it should match.
What the pins are not for. None of the math or the reasons uses a pin. In the test below, the pins were used for zero decisions. That is on purpose.
The vault. Before a sentence gets a pin, emails, phone numbers, ids and names are swapped for code words. The same value always gets the same code word, so the pieces still match up. The real values are locked in the vault with a key, and every peek is written in the audit log.
One sentence, three forms
the original (sealed on the shelf)
"Contact J. Alvarez, jalvarez@acme-mutual.example, about price list 2024.1."
with names hidden (what gets a pin, what any language model sees)
"Contact [[name:7c1e0b9a2d44]], [[email:3f9b8a1c0d2e]], about price list 2024.1."
the pin (a list of numbers; 768 of them with a real embedding model)
[0.0213, -0.0871, 0.1140, ...]
The six questions
Each question has its own helper. Most helpers are rules, not AI.
We did not build one big AI that "does insurance". We built one small helper per question. A helper is either a rule (if this, then that) or a language model with a strict job. Every answer is signed with the name of the helper that gave it.
Question
What it answers
Which helper
In the test
R1 · What should the bill be?
The price, redone step by step from the price list and the rule book
The math steps, as rows (rule set v4)
all 400 bills redone
R2 · Does it match?
Yes, or no with the difference
A limit: must match to the cent
82 flagged, 0 false alarms
R3 · Where did it go wrong?
The first step whose number differs from the scratch work
Comparing two lists
every flagged bill got a step
R4 · Why?
old price list · skipped discount · typing mistake · manager override · rounding
Six rules that look at clues (rule set v2). The language model is asked only if the rules say "not sure".
80 of 82 right. The model was asked 0 times.
R6 · How much is at stake?
The total across the whole book
Adding up
computed for each bill
R7 · What now?
let it go · send to a person · open a ticket
Six rules (rule set v1)
send to a person 51 · let it go 26
Did we create or train a model? No. Every question here was answered by rules we wrote (rows with versions) and by lookups in Memory. The language model was downloaded as it is and only given instructions; it was not trained, and in the final run it was not even asked. Training comes later, once people's decisions have flowed back as labels: then a small model per question is trained on those labels, tested on data it never saw, and used only if it beats the rules.
Why rules first? We also tried giving the same 82 wrong bills, with all the same clues, to two small language models alone and asked "why?". One got 8 right. The other got 41. The rules got 80. A small model is bad at comparing two numbers and applying a definition, and that is exactly what rules are good at.
llama3.2:3b alone
8 / 82
qwen2.5:3b alone
41 / 82
the rules
80 / 82
The notebook (ledger)
Every answer is a line written in pen, with a seal.
A line says: which bill, which question, the answer, how sure, which rule fired, which version of the rules, which facts were read, and who was allowed to act on it. The database refuses to change or delete a line. Each line's seal includes the seal of the line before it, so a "check the seals" button can prove nothing was touched.
The notebook, live. 1,128 lines for this job: 400 R1, 400 R2, and 82 each of R3, R4, R6, R7 (only wrong bills get the last four). Seals verified intact.The test
A quiz with 400 bills. We secretly made 82 of them wrong and kept the answers to ourselves.
Think of a spelling quiz. The teacher writes the words, keeps the answer sheet, and the student only gets the quiz. We did the same thing. A program we wrote made 400 pretend bills and, on purpose, put a mistake in 82 of them. It also wrote a secret answer sheet: which 82 bills are wrong, and why. The Brain was given only the bills, never the answer sheet. When it finished, we compared its notebook with the answer sheet to score it.
Hidden mistake
Bills
What it looks like
skipped discount
27
one step in the scratch work repeats the number before it
typing mistake
23
the computer used the price from the row next door
manager override
15
the math is right, but a note says "15% off"
rounding
11
off by one cent
old price list
6
step 1 used last year's price
no mistake
318
must not be flagged
Front door. 5 files in, 0 twins, 0 unreadable, 0 unknown. A person said yes to the guesses.
Judgment. All 400 bills redone on their own dates, six questions each. 3.8 seconds.
Score. Compared with the answer sheet. The notebook's seals were checked: 1,128 lines, all intact.
82 / 82
wrong bills found
0
correct bills wrongly flagged
80 / 82
reasons named right
10.5 s
start to finish, on a laptop
The proof screen, live. The same test run on the live app (24 seconds there): the stages, the score against the answer sheet, and the reason-by-reason table.The answers
What the Brain wrote in its notebook, one example for each kind of mistake.
Copied from the notebook. Each line is signed, says which rule it used, and points to the facts it read.
Home bill HO-2024-220021 · a skipped discount
roof is 4 years old, so a 15% roof discount applies · the scratch work shows 4.36, 4.36, 4.36 (the number never changed) · charged $784.80
wherestep 1 (the base price): the Brain read 0.0234, the computer used 0.0254
whyold price list · rule: 0.0254 is exactly what the previous price list said for this area and car type
what nowsend to a person
Home bill HO-2024-220044 · a typing mistake
match?no · $632.80 too little (21.45%)
wherestep 1: the Brain read 4.237, the computer used 3.328
whytyping mistake · rule: 3.328 is the price for a different row of the same table, so someone keyed the wrong row
what nowsend to a person
Two that are fine to let go
HO-…220011charged $682.19, should be $802.58, 15% less · every step matches · the note says "Retention credit -15%" → manager override → let it go
HO-…220023charged $873.89, should be $873.88 · one cent → rounding → let it go
What a person sees: the list of 82 bills with the reason, the amount and what to do. Click one and you see every fact and every decision for that bill on that date (the folder screenshot above). No number on the screen was typed by a language model.
What it got wrong
Two tries to get here. Two bills the clues cannot settle.
Try
What changed
Found
Reason right
1
match to the cent; fixed bugs in our test generator
81 / 82
33 / 81 (the model was asked 49 times and got 1 right)
2
two new "why" rules: skipped discount, wrong row
82 / 82
80 / 82 (the model was not needed)
The two misses. Two bills had a typing mistake where the wrong row happened to have a factor of exactly 1.0. In the scratch work that looks identical to a skipped discount, so the "skipped discount" rule fired. From the clues alone, nobody can tell these two apart. The right move is to send both guesses to a person, which the Brain already does. We did not bend the rule to match the answer sheet.
Bugs we fixed along the way. Prices in the same table were overwriting each other (fixed by giving each price its own slot). The reader picked the wrong column as the price. A version number came out as "v2025.1" instead of "2025.1". Our test generator planted mistakes that changed nothing. One-cent differences were not flagged. The notebook's seals failed because a date was stored as a whole number once and a decimal the next time.
Not proven yet. A real company's files. The math steps were written from our practice rule book; a real company's expert would replace and approve them before the Brain leaves "report only" mode. Nobody has sent decisions back yet, so the Brain has not learned a new rule from people.