Owen Fowler

Let’s get AI working for you.

I began using AI to write code in 2022, building prototypes for customer pilots at my startup, Plentiful Stays. That work grew into nMODL2, which you can learn about below. AI was not yet good at programming, but I saw its immense potential and knew it would be the center of my career going forward.

Selected work

Four current projects

nMODL2

Business modeling with AI

Engine built

“Could you model my business for me?”

nMODL2 is a simulation engine for a business. A model describes the parts of the business, such as a packing team or a supplier, and how they deal with each other. Give the model a starting point and nMODL2 plays the business forward one event at a time, keeping every event it recorded.

An AI works with nMODL2 through MCP tools or a command line.

I’m building it so that an AI can write the model with you. You’ll bring company records and explain how the work gets done. The AI will write the model, ask about what it doesn’t understand, and revise it with you. Suppose orders are piling up. Before hiring another packer, you could test whether the problem is too little packing capacity or the phone calls that keep interrupting the work. nMODL2 runs the model, and you and the AI can follow the events that led to each result.

Do we need another packer?

Planned conversation, invented results

You & your AI

You

Could you model our order-fulfillment business?

Business notesOrder history
Your AI

I’ll start with these records. What usually holds an order up?

You

Packing. The same two people also handle customer calls.

Your AI

Then the model needs both jobs drawing on the same two people’s time. I’ll set up the current workflow as the baseline, then try two changes against it: more packing capacity, and moving the calls to someone else.

nMODL2Model revised · Baseline and two alternatives run
You

Show me the queue in a chart.

Ask for another view

Illustrative AI-created chart: 36 orders waiting in the current workflow, 18 with added packing capacity, and 14 when calls are routed elsewhere. These are invented sample values.
nMODL2 runs the model and keeps the recordYour AI draws the chart or writes the brief
01 / Comparing extra packing capacity with moving the phone calls.Invented example · Sample results

“Why should I believe that?”

It’s the right question to ask an AI about your business, and nMODL2’s answer is the record. A model is made of agents (not AI agents; here an agent is an actor in the simulation, like the stand or its supplier). To keep models easy to write and to understand, agents can only communicate through channels called contracts: one agent says something, and a contract delivers it to the agents that need to hear it. That is a narrow set of allowed interactions, but a flexible and rich one. And since nothing passes between agents any other way, every statement and every delivery is a row, and each row names the row that caused it.

The AI reads that record. It can’t write a row of it. Only running the model does that, and what the AI writes about a run is labeled as its interpretation. Here is the complete record of one run of the smallest model I have: a lemonade stand, three customers, and a supplier.

One run of the lemonade stand: 11 rows, complete
#AgentWhat was recordedCause
0
Customer
seedIntentcount 3 · units 1 · price 2
start
1
Customer
saidOrder placedunits 1 · price 2
row 0
2
Customer
saidOrder placedunits 1 · price 2
row 0
3
Customer
saidOrder placedunits 1 · price 2
row 0
4
Stand
heardOrder receivedvia customer_order
row 1
5
Stand
heardOrder receivedvia customer_order
row 2
6
Stand
heardOrder receivedvia customer_order
row 3
7
Stand
saidRestock requestedunits 1
row 6
8
Supplier
heardRestock requestedvia supply_restock_request
row 7
9
Supplier
saidShipment dispatchedunits 1
row 8
10
Stand
heardShipment receivedvia supply_shipment
row 9
The complete record of one run. Every row names the row that caused it; every delivery names the contract that carried it.Real record · Synthetic business

“But no model is ever right, is it?”

No. As the statistician George Box put it, all models are wrong, but some are useful. The record above is exact, but only about the model, and the model is an approximation of your business. So what you want is often the gist, not a number: not that the packing queue fell from 36 to 14, but what that did to whoever took the calls.

Conventional simulations hand you numbers. Frontier AI models are good at gist, because the lessons are already in them: they have read more about how businesses work than any person could. What’s hard is getting those lessons out, and a table of totals gives a model little to recognize.

So I invented a way for nMODL2 to record what a run was like for each agent, in the language those lessons were learned in. The events an agent hears and the state it keeps each carry a short, plain statement of what they mean, and after a run nMODL2 gathers every occurrence for an AI to read. I call this Qualia, the philosopher’s word for what an experience is like from the inside, like the taste of coffee. The statements only say what happened. What it adds up to is the AI’s reading, labeled as interpretation.

Chess programs made a leap when they stopped scoring positions with hand-written rules and used networks that had learned judgment from millions of games. I’m looking for the same leap in business. As the AI models improve, the same run will tell you more.

The same run, as each agent met it
DimensionMeaning, and what was measuredEvidence
Stand
Customer demandCustomer lemonade orderorder units total 3 · order price latest 2rows 4, 5, 6
InventoryLemonade inventory balanceinventory balance 2its own state
InventoryLemonade restock shipmentrestock shipment units total 1row 10
CashLemonade sales cash balancecash balance 6its own state
Supplier
ReplenishmentLemonade restock requestrestock request units total 1row 8
What an AI reads about a run: each agent’s part of it, in the model author’s words, tied to the rows of the record.Real output · Synthetic business
Reality gets a vote.

You record what actually happened, with its source. A later run replays those facts up to today and projects from there, and the difference between the earlier projection and what happened is reported as exact arithmetic. When the stand’s register counted four customers instead of the three the model assumed, the result was sales +1, cash +2, inventory −1. Nothing grades the forecast for you.

Built, and next.

Running today: the engine and its record, the agent-by-agent check, Qualia, and the comparison of a projection with what happened. nMODL2 has no AI of its own; the reading is done by whichever AI you connect. Written but not yet something an AI can call: ranking which agents’ experience changed most between two runs. Next: the AI writing the model with you, which is what the first question asks for.

How a model is built, checked, and kept honest

nMODL2 has its own modeling language. A model declares the agents, what each one hears and says, the contracts between them, and the shape of every message. Each agent’s rules are written in Python. The engine refuses what would break the record: an agent addressing another agent, a contract that changes a message in transit, or a rule that reads a clock or shared state.

Two models exist today: the lemonade stand above, and a vacation-rental business with eight agents, from occupancy and guests through stock, supplier, billing, and cash. Detail grows where it would change a decision. A supplier can start with one rule, ship on request, and later gain a model of its own stock and lead times while keeping the same contracts with the rest of the business.

Models have no clock and no dice. Run one again, in another process, and you get the same record, row for row. A finished run can also be checked agent by agent: each one is re-run alone and must reproduce its own rows and final state. If anything had passed between agents off the record, that check would fail.

Qualia is derived after a run and never during one. Rows that match an authored meaning become occurrences. Occurrences accumulate into an observation for each dimension of an agent’s experience, observations make up that agent’s profile, and a bounded window onto the profile is what an AI reads. Every step keeps references to the rows and meanings it came from. Nothing in the chain calls an AI, and none of it feeds back into a run.

Changes are tried as alternatives branched from the same starting point and compared on the same evidence. A model’s own rules can refuse one: ask the stand to serve more customers than it has lemonade for, and the run stops and says so rather than inventing a sale. Accepting a change is your decision, recorded as yours. Because every run keeps its complete record, you can bring a more capable AI to the same evidence later and ask again.

Enneagram Consultant

Enneagram assessment and consultation

Web app

Your type is a start.
What happens next?

I began by comparing passages from Mark Twain’s The Diaries of Adam and Eve with descriptions of Enneagram personality types. The matches were interesting enough to keep going. That experiment became Enneagram Consultant.

I use Qwen3 Embedding 8B to represent the meaning of text in 4,096 dimensions. From carefully written Enneagram examples, I build a reference for all 27 subtypes. The assessment scores your answers against a published version of that reference, so the same answers produce the same profile.

Describe something happening in your life and the consultant measures it in the same space. OpenAI Astra uses that analysis and your profile to write two possible responses: one that works with your usual tendencies, and another that asks you to try a balancing approach. TypeSafe’s Jev checks the draft for claims your account does not support or that contradict what you said. You can ask follow-up questions and return to the conversation later.

Try the demo

Take the assessment yourself, or start with a prepared example.

Two Enneagram Consultant phone mockups: a celestial Relic with a gold Enneagram diagram, and a floral theme showing the New consultation panel.
02 / Two views of the Relic.Phone mockups

Beyond the assessment

A reading you can
return to.

Auth0 handles sign-in. Your account keeps your assessment and reading available when you return. RevenueCat manages the subscription that opens the full reading and ongoing consultations. Each consultation begins with a situation you choose to bring, rather than another personality test.

Product and next steps
CapabilityStatus
Assessment, readings & themesWeb app
Consult, follow-ups & JournalWeb app
Accounts and saved results · Auth0Web app
Subscription access · RevenueCatWeb app
Public API & MCPNext
Additional personality frameworksFuture work
What the 4,096 dimensions measure

Each embedding contains 4,096 numbers that together represent aspects of a text’s meaning. Enneagram Consultant compares those representations with reference points built for the 27 Enneagram subtypes. The resulting profile describes how your answers relate to those subtypes.

The assessment uses scores computed from these semantic comparisons. The same answers produce the same scores. When you bring a new situation, the consultant measures its description against the same subtype references before Astra writes its response. Jev reviews that response for unsupported or contradictory claims. An API and MCP interface can make the same analysis available to other software and AI assistants.

Farm Run

Local farms & food

App prototype

What could you cook with this week’s crop?

“The fennel is especially
good this week.”

A farm may have plenty of fennel while someone nearby has never cooked it. I want Farm Run to take a farmer’s update and help that person decide what to make for dinner.

The AI could suggest a recipe and work out what else to buy. The customer would still buy from the farm stand, Food Hub, or grocer that sells the produce.

How the idea works

The farmer should be able to say what is ready this week in their own words. AI would turn that update into recipes and shopping suggestions, with a person checking them before they go to customers.

The prototype uses sample data. Development paused for the farming season. We have also been bringing farmers, nonprofits, and local leaders together to discuss the app.

Example Farm Run screen with this week’s produce, roasted fennel, and a tomato and white bean salad.
03 / Recipes made from a farmer’s weekly update.Example app screen

Fractal Context

Language model research

Research in progress

Could a fractal idea help a language model learn?

I’m interested in whether patterns that recur at different scales could help a language model learn. The first experiment, built with AI in nanochat, was a way to get started. It used spans of 1, 2, 4, 8, and 16 tokens. I expected those spans to be too small to reveal much fractal similarity. The early results looked promising, but performance got worse with more training iterations.

The next experiments will use the model’s attention patterns to find scales that fit the text being read. We’ll begin by asking whether different attention heads pick up similar information across different spans, and whether giving that agreement more influence improves learning.

That seems more promising to me because we’ll be looking at scales the model finds useful. We can then widen the context and test for recurring relationships over larger stretches of text.

The next experiments

Attention tells us which earlier tokens a model is drawing on at a given point. The first new test will compare heads that gather similar information over different distances and breadths of context. We’ll test whether the model can learn to use that agreement to make better predictions. Matching the shape of relationships across scales is a later, harder experiment.

We’ll use controlled examples with repeated structure at varying distances, then check whether the model learns the relationship when the wording or distance changes. After that, we’ll compare it with the unchanged model on real text. The small synthetic dataset used so far helps us check the mechanics; it cannot establish that the idea improves language learning.

Diagram of the first experiment, using spans of 1, 2, 4, 8, and 16 tokens and four model comparisons. Early results were promising, but performance worsened with more training.
04 / The starting experiment: five small token spans.Promising early results; worse with more training.

AI training & consulting

For people and organizations

Put AI to work in your organization.

Prompting AI is easy. Getting a return on what you spend is harder. I don’t stop at showing you how to use the tools. We look at the work your organization does, figure out where AI could save time or make money, and measure whether it does.

Learn to work with AI

I teach people to use AI on work they actually need to do. We practice giving it context, checking its answers, and revising the work together.

Get AI working in your organization

I help businesses and organizations decide where AI can be useful, choose suitable tools, and try them on a real task. Then we work through what the team needs to use them well.

Let’s discuss your team

Work with me

Tell me what you have in mind.

I build websites and apps, provide AI training, and consult with businesses and organizations getting AI into their work. Tell me what you want to do and what has been getting in the way.

Your message goes directly to me.