← the 15 laws

Chapter 12 — The Wrapper, Never the Fork

When an agent serves a BU, I add context — I do not duplicate the logic.


The fastest solution is almost always the copy. Maat works well? For Arduina, copy Maat, adjust two or three lines, and there is Maat-Arduina. It is immediate, it works right away, and it creates a time bomb. Because the instant the copy exists, two versions live in parallel — and they will diverge. Maat evolves, its copy stays frozen. After a few weeks, the copy is outdated, and no one knows which one is authoritative.

I saw the trap while deploying Walter across BUs. The temptation was to fork the agent for each context. I chose the opposite: a light wrapper. Walter-Arduina does not copy Walter’s logic — it points to it, and only adds what is specific to Arduina: the ICP, the legal entities, the escalation thresholds, the NDA-first rule. The business logic stays in one place.

So I never write a fork where a wrapper will do. The BU variant is a shell: it references the base agent’s logic and contains only its BU’s context. A single source of truth, multiple contexts branching into it. When the base agent evolves, all its variants inherit that change — effortlessly, without drift. Maintenance stays singular instead of multiplying.

What I forbid myself: copying an agent’s logic to adapt it. Letting two versions of the same core coexist. Confusing “customizing for a BU” with “duplicating for a BU.”

The day I fork out of convenience, I sign a debt that grows on its own. Every copy will have to be maintained, corrected, synchronized by hand — and since no one ever truly does, the copies rot in silence. Duplication is a debt; the pointer is an asset. Between the two, there is no comfort of today: only the cost of tomorrow.

One logic, one place. Everything else is just context.


Duplication is a debt; the pointer is an asset.