Notes on .NET, XAF, and building things
Twenty years of XPO, application frameworks, and lately a lot of applied AI. 368 articles and counting.
Browse by topic
All topics →Latest articles
View all →
Should Agents Talk to Each Other in Human Language?
Human language is how agents talk to us. Between themselves, they might do better with a language that keeps only what the other side can use, the way an MP3 keeps only what your ear can hear. Psychophysics, decision models, and the experiment we will run in Creatura.

Two AIs, One App, They Never Met
I gave two AI agents one goal, a shared shopping list, put each in its own Linux sandbox, and let them talk only through a message board and a ledger. They agreed on an API in the first minutes, shipped 5/5 at minute 8, and both said done with evidence. Here is the run, in their own words.

Stepping Through Kite Lines in the Debugger
A reader asked whether Kite's #line markers also let you step through Kite lines in the debugger. They didn't, yet: Kite compiled in memory without debug symbols. The #line markers turned out to be the hard part. Emitting a portable PDB was the rest, and now VS Code stops on Kite lines, steps into Kite functions and shows Kite variables.

Who Is Working on What (Creatura, Part 5)
My agents run on several computers, and nobody could tell me who was working on what. Creatura's cells give each agent an identity bound to its hardware, a signed append-only ledger of its work, and a hub that relays everything but cannot forge a word. This is also where Sync Framework, the one I started in an airport in Mexico, finally does its job inside Creatura.

Retry, Penalize, or Stop? How Creatura Handles a Tool That Says It Worked When It Didn't
A reader who builds Semantic Kernel agents asked what Creatura does when a tool says it succeeded and the world says otherwise: retry, penalize, or stop the run? The answer is all three, in stages. And I built a Semantic Kernel host to show it.
More topics
All topics →
Three Trucks After a Flood (Creatura, Part 4)
Three trucks, each a Creatura agent with its own ledger, carry supplies to four villages after a flood. One road lies, one fuel gauge lies, and a judge reads only the world. Three fixes and one shared warning took the convoy from 1,406 to 1,500 units delivered and from 262 lies acted on to 45.

Four Hypotheses That Failed (Creatura, Part 3)
Before Creatura's agents touch the real world, they are tested in emulated worlds that lie, judged by an oracle they cannot fool, against hypotheses written before the code. The first battery had seven hypotheses. Four failed. Here is what each failure taught.

One Loop, Three Minds (Creatura, Part 2)
Creatura has one agent loop, not three. The model never touches the world directly: a control layer offers it only the tools it may see, checks every effect against the facts, and catches the tool that lies. Bach, Levin and Peterson differ only in what they put into the loop's slots, and the seat in the middle can hold a model, a trained network or a plain planner. Part 2 of the Creatura series: the architecture.

The Birth of Creatura: An Agent Framework Built on the Road
Creatura is a C# framework for building AI agents, training them, and testing them in emulated worlds. Two weeks traveling through China with a friend, conversations with Joscha Bach and Michael Levin on the Lex Fridman Podcast, a book by Jordan Peterson, and a few late nights of programming became Creatura, my new agent framework. Part 1 of a series: how it began.

SyncFramework 3.0: .NET 10, an in-memory client and an official MySQL provider
BIT.Data.Sync 3.0.0 and the SyncFramework EF Core packages 10.0.0 are on nuget.org. Everything targets .NET 10. There is a new in-memory client that needs no HTTP, an official MySQL provider, five bug fixes, and one small binary break.