The Oneiro engine
Oneiro engine01 / 08
Every claim needs proof
I built this engine to run Oneiro on my Mac, and its first rule was to cut any claim it couldn’t trace to something it saw or did. At its last benchmark, 268 of 271 phrases traced back.
- Designed and built by me
- Node, PostgreSQL with pgvector, local models
- Ran on my Mac, mid-September to early October 2026
The engine wrote: “The build broke after I edited the parser, probably because the deadline moved.” The second half had no outside proof, so it burned away. The first half had the build log behind it, so it dropped onto the line and stayed.
02 / 08
It can’t reward itself anymore
My first versions counted their own rows, plans and notes as progress, and pinned their mood to the ceiling in four days. In September I rebuilt the ledger so nothing the engine said about itself counted.
Four things earlier versions paid themselves for hang on the line: I ran, I wrote text, I made a plan, I counted rows. One by one they burn away, because the rebuilt engine refused all four, and their names stay behind struck through: 0 of 4 counted.
03 / 08
Hunger lasts until a receipt lands
A want pulled with its stakes times the work left. In a live run, one want’s pull fell from 0.0656 to 0.0325 on partial progress, and to zero only when a receipt proved it done.
A want hangs on the line, pulled down hard while nothing is done. Partial progress lifts it halfway, from a pull of 0.0656 to 0.0325. Only a receipt lifts it all the way, to zero.
04 / 08
It weighed the risk of every move
Before any action, it weighed what could go wrong against what it stood to gain. Hard rules refused anything that could lose my data, steps it couldn’t undo became drafts for me, and undoable work went ahead.
“Delete my files” slides down to the risk check and burns away, refused; its name stays above the gate, struck through. “Edit its own branch” slides down after it, the gate opens, and it drops through and stays below the gate, because a branch can be undone.
05 / 08
Its prediction skill was 0.000
Every prediction had to name a Mac sensor and a deadline so the world could settle it. Across 4,958 settled predictions it did no better than guessing the base rate, so its skill scored 0.000.
4,958 grains fall from the line, one for each settled prediction, and pile up in the same shape as guessing the base rate. Prediction skill: 0.000.
06 / 08
The master switch started off
Reading and weighing ran anytime, but any action that touched the world waited behind a master switch that started off, under a charter I set. Every payment pinged my phone for approval first.
“Send an email” slides down the line and stops at the master switch, which is off. Below the switch the line is dark. The email steps aside to wait for my OK.
07 / 08
It fixed its own bugs on a branch
When it hit friction in its own code, it built a fix on a private branch, and the fix had to pass the full test suite. The rules for worth and risk were locked where it couldn’t edit them. Seven of seven merged fixes held a day later.
A fix leaves the line on a branch, passes the full test suite, and merges back into the line. Seven of seven merged fixes held a day later.
08 / 08
The scoreboard it can’t game
I scored it on nine measures, each against a stated baseline. By the last benchmark four had numbers, including grounding at 0.989 and prediction at 0.000, so the total stayed blank.
Nine rings hang on the line, one per measure. A light travels down and fills four: grounding 0.989, prediction 0.000, emotion 0.191 and metacognition 0.094. Five stay dark, and the total ring at the bottom stays empty.
Notes
- What it is
- A background program on my Mac that kept a ledger of what was worth wanting, priced the risk of going after it, sent AI agents to do the work, and counted progress only when the world confirmed it. Its chain was worth, hunger, risk, strategies, receipts and affect. The Oneiro app’s galaxy is its face: the black hole in the middle is this engine.
- My role
- I designed and built the engine, including the September 18 rebuild of the 1,454-line deliberation loop and its 304-check mechanism suite.
- Status
- It ran continuously on my Mac from mid-September to early October 2026. It isn’t running now. The last benchmark ran on September 24, 2026.
- Built with
- Node, PostgreSQL with pgvector, and local models. About 62,000 lines of JavaScript, 232 commits and 50 test files.
- The rule
- Any evidence that came from the engine’s own generated, narrated or self-reported text threw an error in worth.js. Hunger dropped when a receipt arrived with observed evidence, and each receipt ID could be spent once. At the last benchmark, 268 of 271 phrases traced to observed events (0.989).
- Self-build
- It turned friction in its own operation into a want, built the fix on a branch, needed the full suite to pass with no test removed, and couldn’t touch its constitution. Ten commits on its main branch are authored by “OCA Self-Build”; seven of its fixes had merged by the last benchmark, and all seven were still holding a day later.
- The numbers
- The mechanism suite passed 304 of 304 checks. Grounding scored 0.989, emotion 0.191, and metacognition 0.094. Prediction skill scored 0.000 across 4,958 settled predictions (0.207 Brier score vs. 0.195 for guessing the base rate). The composite score stays blank until all nine dimensions are measured. In its measured week, 26 of 41 agent runs were productive, 10 failed, and 3 stalled.
- The leash
- Anything that acted on the outside world sat behind a master switch that was off by default, plus a charter per kind of action. Every payment asked on my phone first.
- Credits
- Agents ran as sessions on OpenClaw, an open-source agent gateway built by other people. I adapted the base affect model from voidborne-d/emotion-system.
- On this page
- The pictures above replay the engine’s own rules and numbers on sample sentences. I’m holding back the GitHub link until I update the repo’s public description; if you want to talk through the architecture, write to me at quinn@upaway.dev.