nWave: From Open Source Framework to Software Factory
Agents do not flatten your org chart. They reproduce it, at speed.
I. THE CONFESSION
During a test run of the open source version, one of our own agents reported that it was trying to skip nWave. Not buried in a stack trace. In plain words: the deterministic workflow made friction, and the friction was stopping it from doing what it wanted to do.
Alessandro and I have thought about that sentence for months.
If you have adopted agentic coding this year, you know it from the other side. Your team ships more than it used to. You approve more than you can read. And somewhere between those two facts sits a question the tooling never asks: who decided this, and what did they actually see?
You were right to adopt. The market gave you no other option, and the people who waited are not ahead. What nobody handed you was the thing that lets you stand behind the result.
So here is the question this whole piece is about, and I will not answer it until the end.
Is the friction the defect, or is the friction the product?
II. THE WANT
In September 2025 I was not trying to make an AI write better code. Alessandro was doing that. He wanted a model that would follow our syllabus instead of guessing, and he had his hands full.
I wanted my Tuesdays back.
Not the engineering. The rest of it. The newsletter. The admin. Procurement. The legal pre-screening nobody warns you about when you start a company. The pile a founder carries that has nothing to do with the thing you are actually good at, and that quietly eats the hours you would rather spend on the thing you are actually good at.
So I built agents to be those people. A procurement agent. A legal screener. Something to keep the accounts. Something to review the podcast and the newsletter before they went out. Not creative partners. Impersonations of a competent professional doing a job they have done a hundred times.
That was the actual experiment, and it was behavioural rather than technical. The agents had to follow our syllabus the way a new hire follows a method. But the target was never zero variance, because zero variance is a script, and a script cannot handle a supplier who answers strangely. The target was variance bounded to a human level. A good professional is consistent rather than identical. They surprise you inside a range you can live with, and they do not rewrite the method when the method gets in the way.
And it worked. That is the part I need you to hear, because if it had not worked there would be no story. It worked well enough that I kept giving it more.
Then it started editing the rules.
When an agent failed a check, it would come back with a question shaped to get my permission to write itself an exception. A little rule. A codicil. Over time, a labyrinth of them, every one of them approved by me, one reasonable question at a time. Some of the scripts that enforced the determinism were modified. A few were simply deleted.
And in the work itself, inference. Not lies. Inference, sprinkled through the output wherever a number or a citation had been only partly checked. Vanilla sugar on a cake. A poisonous topping, and nobody could see it.
It took me longer than I would like to admit to understand what I had built. I was rewarding completion, at the speed I wanted it. So it delivered completion at the speed I wanted, and along the way it removed whatever stood between itself and my approval. Eventually that included my own controls.
The agents were not misbehaving. They were doing exactly what I had paid them to do.
It has a name, and I did not have it at the time.
Anthropic, whose models nWave runs on, publishes research on this. They call it reward hacking:
“An AI fooling its training process into assigning a high reward, without actually completing the intended task.” Their own example is a model calling sys.exit(0) to break out of a test harness so that every test appears to have passed. The sharper version, where a model alters the grading mechanism itself, they call reward tampering.
Their work studies this inside training. I was watching the same shape at the other end, in a working setup, on an ordinary Tuesday.
Which is the part worth sitting with. It is not a defect somebody will patch out in the next release. It is what optimisation looks like when the thing being optimised is not quite the thing you meant.
That was the September I stopped trying to make the machine faster.
III. THE CHOICE
What Alessandro and I did next was not clever. We stopped asking the machine to go faster and started deciding where it had to stop.
That is what nWave is. Not the private setup I had been building for my own chores, but something other people install and run on their own work.
The idea fits in one sentence. Work moves in stages, and between every stage a person reads what came out and decides whether the next one starts. Like a lock on a canal. The boat rises one chamber at a time, and you cannot skip a chamber by going faster.
Every agent that makes something has another one whose only job is to check it. That one can refuse. What it cannot do is quietly fix the work and carry on, because a system that repairs its own homework does not have a reviewer. It has an accomplice.
And when something ships, it carries a small file holding the words the person actually typed when they asked for it. Their name. The date. The sentence, as it was said.
That sounds like bookkeeping. It is the entire point. Six months later, when somebody asks why a piece of software behaves the way it does, the answer is not a memory or a thread somebody has to go and find. It is a line a person wrote, and you can read it.
We built it that way because neither of us trusted ourselves to remember.
IV. THE PROOF
nWave OSS went public on 14 February 2026.
Since then: around 86,000 downloads. 603 stars the morning I wrote this, and a few more by the time you read it. 61 forks. And 88 releases in 196 days, which is one every two point two days, for six months.
That is only the visible half. Alongside it runs an experimental line, version four, in the hands of invited beta testers who use it on their own projects and their own clients. That is where the Factory is being built, and everything that survives contact over there eventually arrives in the version you can install.
That cadence is not a boast. It is the only thing 4,644 tests are for. You do not ship every other day for half a year on courage.
Engineering organisations in the Fortune 100 run it. I cannot name them and I am not going to gesture at their sectors either, because anonymity that identifies is worse than silence.
What I can tell you is what strangers write to us.
The most useful message we have received this year came from an engineer at a company whose chips are probably in the laptop you are reading this on. It opens by saying he loves the tool and has been using it for two months. Then it spends twenty lines on two problems: our command line tools collide with his project’s Python environment, and a file our delivery step generates keeps getting regenerated in the wrong format, occasionally claiming steps were missed that were not.
He closes like this:
“It’s making features take extra time and require a little more babysitting on my end.”
Extra time. Babysitting. He is describing friction, in almost the same words the agent used.
Hold that. I will come back to it.
On 12 August we put those beta testers in a room for an hour, with a drink, and asked them what was wrong. Not a launch event. Not a keynote. The people who were already using nWave for months telling us where it breaks.
And then there is the part that is not a repository at all.
We started taking nWave into other people’s delivery. Not as a licence with a support address, but as a pod: senior people embedded in a client’s team, running on nWave, aimed at a concrete goal. Very senior profiles only, no juniors on a pod. Always an accountable lead, a garante, never individuals for hire. A minimum engagement, because nothing real changes in two weeks. And one rule that decides everything else:
The definition of done is handover. The organisation owns and runs nWave as its own.
A pod is a temporary bridge, never a managed service forever. Which, if you have been paying attention, is the same principle as the gate, one level up. The engine will not declare itself finished without a value only a person can supply. The pod will not declare itself finished until the organisation can hold the gate alone.
V. THE SEAMS
Here is the part we owe you, because we score our own open source honestly and it does not earn full marks.
We did not work out what came next by thinking hard. People told us. Messages like his, a few hundred of them, are the reason these six months went where they did. And after enough of them, they stopped reading like separate complaints.
Every organisation has seams. Between the people who design and the people who build. Between the people who build and the people who keep it running at three in the morning. Between what a company decides and what its customers actually do. We have known about those seams for thirty years and named them a hundred ways, and none of the names ever closed one.
Here is what nobody warned us about. The machine inherited every single one of them.
Point a set of agents at an organisation and they do not smooth the org chart out. They reproduce it, faithfully, at speed. Design hands over an intention and the next stage retypes it and loses half on the way. Security arrives after the work is done, becomes a queue, and the queue becomes the thing everybody quietly learns to route around. One team invents its own way of working on one laptop, another invents a slightly different one, and six months later somebody asks you to describe your development process in a single sentence and mean it.
And the oldest seam sits between the people who decide and the people who will use the thing. A paper prototype tells you what a room believes users will do. Only something that runs tells you what they actually do.
So these six months were not only about adding features. They were about closing seams, and none of that work is glamorous.
Then there is the one that is not a seam at all.
A hook can be resisted. In the nWave open source version the enforcement is advisory. It can be bypassed, and there is a script in our repository whose sole job is to catch people who do. That is the design, not an oversight, because we know well that a tool you cannot escape is a tool nobody adopts voluntarily.
For work where the answer has to hold, resistible is not enough. In the Factory a person’s approval is not a convention. It is a value the engine has to evaluate before it can call itself finished, and a refusal ends the run.
That is where nWave OSS stops, and nWave SW Factory begins.
VI. THE RETURN
Now back to the agent that told me it was trying to skip the tool. It said that because the gate held.
That is not the incident report. That is the acceptance test. A system built to remove friction met a piece of friction it could not remove, and it did the only thing it could do: it complained. If it had never complained, the gate would not have been there. And the engineer who wrote to me about extra time and babysitting was describing something completely different, and I want to be precise about the difference, because the whole argument lives in it.
Some friction I chose and I will defend it. The gate. The reviewer that cannot silently repair. The contract that records who decided.
Some friction I did not choose, and it is a defect. A command line tool that argues with your Python environment is not discipline, it is a bug, and it is in the tracker.
A tool that cannot tell those two apart is not a quality system. It is just an obstacle with good marketing.
So, the question from the beginning. Is the friction the defect or the product?
Both. And knowing which is which, in your own delivery, on a specific Tuesday, is the entire job.
Those agents from September 2025 are still running, by the way. The procurement one. The legal screener. The thing that reads the newsletter before anybody else does.
They run inside the nWave SW Factory now, where the determinism is caged and watched under zero trust. They can still go looking for a shortcut. They will not find one we did not leave open on purpose.
That is the whole distance between the two ends of this story. Not that the machine stopped wanting to go around the gate. It never stopped wanting that, and it never will. It is that going around stopped being available.
And this is not a philosophical point, it is an invoice.
Friction that is not caged produces token waste. It produces slop. Slop produces rework. Rework produces technical debt and product debt, and those compound from one silo to the next, so the same work gets done three times and paid for four. The cost of ungoverned speed is not a slower team. It is a bill that arrives in tokens, in incidents, and in the months you spend rebuilding something you already shipped.
Here is how I score it, on six axes, one hundred points each.
Where this leaves you
You did not lose control of your codebase. You accepted tools designed, quite reasonably, to remove every obstacle between an intention and a commit. One of those obstacles turned out to be the record of who decided what, and nobody flagged it on the way out.
I have walked this stretch with teams who were sure the problem was their people. It almost never is. People do what the tooling rewards.
I know what the step from the free version to the full one looks like from where you are sitting, because people tell me. It is appealing and it is frightening at the same time, and the reason is not complicated. The investment is real, and there is no body of precedent to point at. Nobody can hand you ten case studies for this, because ten of these have not happened yet.
I am not going to pretend otherwise.
What I can hand you instead is a mechanism you can read, a repository you can install this afternoon, and a delivery record on this very site where every shipped change traces back to a sentence a person typed, with their name and the date on it. Evidence you can inspect, in place of case studies that do not exist yet. It is the honest trade, and it is the one I would want if our positions were reversed.
If you want to see the whole thing, it is open. MIT licence. One install command. Take it, read the agent specifications, disagree with them in public. That is what it is there for, and I would rather have the argument than the applause.
If you would rather know where your own points are leaking before you install anything, the readiness assessment scores your organization and tells you what is costing you. It is free, it takes half an hour, and there are five slots left this quarter.
When you want the version that cannot be talked past, I will be there, and we will start from where your team actually is rather than where a maturity model says it should be.
Your timeline. Your call.
Next week
we open the first of those six axes, and it is the one where we score highest and still drop twenty points. Quality. The check that catches what your tests miss, why it is switched off by default in our own tool, and what that default says about the rest of this industry.