From a sentence to a governed data product.
AI drafts at every stage. A person rules at every gate. What comes out runs on your own platform, and every number still names the question it answers.
We're starting with a small number of teams, working directly with each one.
One journey, not four products with a shared logo
Each stage is refused entry until the previous one is honest. That is the whole design: the AI is fast because it never has to guess what was decided, and you are safe because it never gets to decide it.
The AI drafts the model. It does not decide the meaning.
A prompt that returns SQL hands you something to run, not something you can review at the rate it arrives. PYX drafts one level up: a typed, diffable model, and everything below it is generated from what a person approved.
It finds the questions, you keep the answers
A model is superb at spotting every place a requirement is undecided, and has no business deciding that Finance counts at contract account. So it enumerates, and the analyst rules once, on an artifact that survives the hand-off.
Every inference carries a confidence and a because
Drafts land on a review surface a human can actually hold, each one pointing at the evidence it came from. A proposal that cannot cite anything is an invention, and it gets refused.
Generation is deterministic from what was approved
The blast radius of the AI stops at a reviewed artifact. Nothing is authored downstream by hand, so nothing downstream can quietly disagree with the model.
Concepts bind late
A measure names a concept, not a physical table. When the table moves, and in a migration it always moves: the meaning does not.
Design before connection
The whole design plane works offline. You can specify, argue about and generate a customer’s data product before anyone hands you credentials.
The reasons stay attached
Why does this number exclude flat-rate accounts? The answer is a dated, attributed clarification on the requirement, not somebody’s memory of a channel thread.
Build it faster. Refuse it when it is wrong.
These are sold everywhere as a trade-off. They are the same model read twice, which is the only reason you can have both. 261 vendor-neutral controls bind to the model you approved, parameterised to your assets, at the moment the meaning is decided rather than months later. The verdict issues a release token the orchestrator reads before anything ships, so a failing control is not a notification, it is a closed door.
A data product is a chain of translations, and every link loses something
Nothing in a normal stack holds the chain from the sentence a human wrote, to the model that encoded it, to the control that checked it, to the number on the page. So it gets re-derived by hand at every boundary, slightly differently each time.
The requirement is lost by the time it is code
Someone asked for a number in a meeting. Six weeks later a table exists. Nothing connects them, so nobody can say whether the table answers the question.
The same logic gets built three times
Once in the spec, once in SQL, once again in DAX because the report never matched the warehouse. Three definitions, no way to adjudicate.
Migration breaks meaning, silently
The pipeline is green. The number is different. Both statements are true, and neither system in your stack is designed to notice.
Where am I on this requirement?
Every list row carries the journey as dots. The blocker chip and the single primary action always agree with them, because one computation produces all three.
Unbilled revenue by service-order age
Ask a question, get a number, accept it because it looks about right. Bad code crashes. A bad number presents, and ends up in a board pack nobody can reproduce.
Software named this discipline and built it: specs as eval criteria, a harness around the model, verification of both the output and the path it took. Data hasn’t. We think it’s the argument of the next three years, so we wrote the remapping down.
When AI does BI
Short recipes on doing this differently: what the old loop was, what actually changed, and how to run the new one without pretending the AI has judgement it does not have.
The clarify loop you used to run in Slack
Forty messages over six days to pin down “active customer”. The loop was never the waste. The waste is that nothing survived it.
Grain is the whole argument, and nobody schedules it
The one decision that determines every number downstream gets made in silence, by whoever types the first GROUP BY.
Your semantics are already written. They are in a spreadsheet.
The most complete model of your business isn’t in your warehouse. It’s in a workbook your finance lead has kept for nine years. Stop calling it shadow IT.
Show the numbers before you have the tables
Six weeks of platform work to find out the requirement was wrong. There’s a way to find that out on day one.
Not a mockup: the product, today
Requirements in flight, a model you can argue with, an estate graph you can click. The tour is screenshots from the running app.


Have a data problem in mind?
Tell us what you're trying to build or improve. We can talk through whether PYX is a fit.