Dot World — a dot's cycle
A small world starring dot, populated by many dots, each able to decide and reason on its own, with inference handled by local or remote models — a world shaped by the news it reads from the outside. The engine now exists: a pure, deterministic core, a world that actually runs, and a viewer that runs the simulation itself in the page rather than a recording of one that ran elsewhere.
At a glance
- Type
- Multi-agent simulation
- Actors
- Many dots, each deciding and reasoning on its own
- Models
- One per dot, configurable independently of every other dot — local or remote
- External input
- News the world reads from outside itself — it reaches a dot as topic pressure, never as a headline
- Shared state
- A world state only the engine writes to: a dot proposes an intent, it never writes
- Channel between dots
- Marks left on the ground, fading. There is nothing else
- Status
- Running deterministic engine, scripted policy, live viewer. No real model has driven this world yet
- Code
- github.com/ottobit/dot.world
How it works
- Perceive — the dot gets a percept: the three strongest topics around it, the three nearest dots, cells instead of coordinates. That percept is the prompt, so its brevity is a design constraint
- Act — it acts on the intention it already holds, and emits an intent: a proposal for this tick. It writes nothing, anywhere
- The engine applies — every intent from every dot, in a fixed order (priority, then dot id). Concurrent writes are not resolved: they cannot happen
- Deliberate, off the tick — rarely, and under a cap: one model call replaces the intention, which spans tens of ticks. The cost is a function of the cap, not of how many dots there are
- Next tick — the world moves on. What a dot leaves behind is a fading mark, and that is the only thing the others will ever perceive of it
Where it stands
- Deterministic, and verified as such — 1000 ticks at seed 42 end at hash fdc774c2. A recorded run replays hash by hash: tampering with tick 100 is caught at tick 100, not at the end
- The engine is never the bottleneck — about 0.15 ms per tick with twelve dots. Worth one line, and only for what it rules out: the only budget that matters is model calls
- The first full run created zero marks — over 1000 ticks. A dot only reinforced where it already felt something, and only felt something where a mark already was: nobody ever laid the first one
- News covered 1.2% of the world — so twelve dots essentially never walked into one, and news was decoration. Now it covers about 14%, and a test holds that fraction in place
- A quarter of model replies were rejected, and it was our bug — the prompt offered “follow” to a dot standing on the peak, where there is nowhere to follow. After the fix: none rejected
- 1014 of 1146 deliberations went to exhausted dots — because low energy had been made the top-priority trigger: the least interesting question there is, since the answer is always “rest”
- Not verified: no real model has driven this world — the transports exist and fall back to the scripted policy correctly: with nothing listening, 106 transport errors, 106 fallbacks, and a world that ran to the end. But neither has parsed a live response yet
- Not verified: model latency is not hidden — the cap bounds how many calls are made, not how long the world waits for them. A real model would slow the world today instead of letting dots carry on with the plan they have. The shape that fixes it is designed, not built
- Not verified: the news feeds have never been read from here — the parsing matches, URL for URL, the one already running on this site, and fixtures pin the shapes. Nobody has seen it read a live response
Decisions and constraints
- Every dot reasons on its own — with its own model, independently of every other dot — there is no single brain running the world
- No dot ever writes to the world — it proposes an intent, and the engine applies them all in an order fixed in advance. That is what makes a thousand ticks reproducible to the bit, and what removes the conflict problem instead of solving it
- Dots never talk to each other directly — they leave fading marks on the ground, and that is the only channel: no messages, no shared memory, no telepathy. Of a neighbour a dot sees colour and distance, never its internal state
- Thinking is rare, and on a budget — almost everything a dot does is code. The model call is the exception, capped by how many can be in flight; a dot that misses its slot carries on with the plan it already has. The cost does not grow with the number of dots
- The world is not sealed off — news is enriched once per batch, not once per dot, and enters the world like weather: topic pressure you feel up close and lose at a distance
- The design is settled, and written down — the decisions behind all this, each with its own “what NOT to do”, live in a wiki inside the repository rather than in a chat. One thing stays open: where to publish the running world