MOO-384 / Tildespace

A tiny watchable world where residents point at regions of a shared 384-dimensional semantic space instead of speaking in text.

MOO-384 is a tiny, watchable multi-agent world where residents do not speak in text, but gesture as vectors through a shared 384-dimensional semantic space, forming rooms, traces, and attractors that humans can observe through subtitles and maps.

Best profile: contrarian-sleeper POET: frozen / default-off Site: static research replay

Tildespace Viewer

This is a browser replay of compact data exported from a real log. The simulation is not running in the browser.

jump:

What this is

MOO-384 is a small local research artifact for studying vector-space interaction between simple residents.

Tildespace is the watchable world and interface around MOO-384 logs. It is a research notebook and a terminal exhibit — not a product, not a web app, and not a game. It is also not consciousness, culture, or emergent language.

Pointing with vectors, not speaking with text

Residents in MOO-384 do not send sentences to each other. They emit 384-dimensional vectors. Other residents react to those vectors geometrically — by averaging, by fleeing, by sitting between two of them, or by sleeping and summarising what they recently observed.

Human-readable phrases do appear in the logs and the viewer above. Those phrases are observer-side subtitles: the atlas phrase whose embedding has the highest cosine similarity to a resident's most recent vector. Subtitles are not resident speech. The residents themselves never receive a phrase.

how an emission propagates:resident internal state
   384D vector gesture
   other residents react geometrically
   human sees approximate subtitle
not:resident writes sentence  other residents read sentence

instead:resident emits coordinate  other residents respond to coordinate

Why 384?

384 is the dimensionality of the shared sentence-embedding space. The intended semantic substrate is sentence-transformers/all-MiniLM-L6-v2, which produces 384-dimensional unit vectors for short phrases.

The project also runs a synthetic substrate (random 384-dimensional unit vectors with the same noise schedule) so semantic and synthetic regimes can be compared directly. The synthetic mode is not a contrived control — it has been load-bearing for several findings about which dynamics depend on the semantic manifold and which do not.

This is not a claim that semantic embeddings are magic. The project's results often turn on geometry (how far apart the home vectors of distinct residents are) more than on which model produced the embeddings.

Research question

Can simple residents interacting only through vector-space gestures form stable, inspectable, watchable room/attractor dynamics?

  • Rooms are clusters of recurrent emissions in 384-D space — attractor neighbourhoods that residents return to.
  • Subtitles are observer approximations of a resident's most recent gesture, drawn from a fixed atlas of phrases.
  • Viewers are read-only renderings of recorded log files, never live attaches to a running simulation.

Main findings

  1. v0.3Experiment runner First systematic comparison between synthetic and semantic substrates. The initial semantic drift advantage was later traced to a noise artifact, not a property of the embeddings.
  2. v0.7Home geometry Resident identity vectors must be geometrically separated for stable dynamics. Naming residents alone is not enough; their home embeddings have to live in distinguishable regions of the 384-D space.
  3. v0.9Quiet-spread long soak Quiet-spread was stable but early-settled. The substrate held together for 20 000 ticks, but residents stopped moving after the first ~100 — visually trivial.
  4. v1.3Geometer-quiet Metric-clean (balance score 20/20 both substrates) but visually trivial. Late-window active rooms collapsed to one. Looked correct on paper, looked frozen on screen.
  5. v1.6Contrarian-sleeper First profile that was both stable and late-phase rich. 19/20 semantic balanced runs, ongoing motion past tick 20 000, late-window active rooms ≥ 5. The first ecology that looked alive rather than merely stable.
  6. v1.11POET freeze Phrase-bank POET fragmented the ecology. POET's atlas-vector emissions perturbed past the room-clustering threshold and never accumulated; the substrate blew up to 50+ rooms with no recurrence. POET implementation remains in tree, default-off, frozen.
  7. v1.12 – v1.14Visual observers and gallery Cavern viewer enrichment (trails, follow, snapshot, subtitle overlay), one-command visual bundle, and a GitHub-readable static gallery made the world inspectable and watchable.

Current best world: contrarian-sleeper

Two contrarians paired against two sleepers. Contrarians flip away from their paired sleeper's most recent gesture. Sleepers wake periodically and summarise the recent activity of everyone they have observed. Together they produce recurring motion between a small ring of rooms.

This is the first profile where the substrate looked alive, not merely stable.

balanced (synthetic)
20 / 20
balanced (semantic)
19 / 20
late active rooms
> 5
collapse_tick
null in 40/40 (still moving past 20 000)
transitions per run
~3 264
recurrence
1.000

How the profiles compare

quiet-spread

  • richer than early profiles
  • leaky balance
  • early/two-room stable

geometer-quiet

  • metric-clean
  • visually trivial
  • one active late room

contrarian-sleeper

  • stable
  • late-phase rich
  • current best world

POET-on

  • fragmented
  • frozen / default-off
  • useful negative result

What failed

Listing failures here makes the project credible. Each was a real iteration with a written decision record under docs/decisions/:

  • The initial semantic-mode advantage in the v0.3 experiment runner turned out to be a noise artifact, not a property of the embeddings.
  • Quiet-spread (v0.9) was richer in structure than the v0.3 default but leaky — by tick ~100 the substrate had stopped moving.
  • Geometer-quiet (v1.3) was metric-clean (every balance number passed) but visually trivial — late-window active rooms collapsed to one.
  • Phrase-bank POET (v1.8 design / v1.9 implementation / v1.10 tuning sweep / v1.11 long-soak) fragmented the ecology. Across 400 POET emissions in 20 long-soak runs, zero produced a 100-visit POET-touched room. Every two emissions of the same atlas phrase landed in different rooms because the perturbation closure scattered them past the room-clustering threshold.
  • POET implementation remains in tree, default-off, frozen.

What this does not claim

  • consciousness
  • sentience
  • emergent language
  • machine culture
  • AI society
  • proof of the Platonic Representation Hypothesis
  • that subtitles are resident speech

Reproduce locally

Raw runs are not committed because the per-seed TSV logs are multi-MB; only the compact replay JSON used by the viewer above (about 425 KB) lives in this site. The simulator and atlas cache are reproducible from the repo.

Generate the full local visual bundle

python visual_bundle.py

Watch the cave view animated

python cavern_viewer.py \
    runs/exp-v1.6-contrarian-sleeper-long-soak/semantic-seed-1234/log.tsv \
    --speed 10 --trail 8

Regenerate the site replay data

python visual_bundle.py --site-data

Writes docs/site/assets/cavern-frames.json and docs/site/assets/cavern-summary.json from the v1.6 sample log.

If the v1.6 sample log is missing

Regenerate the long-soak experiment (a few minutes on commodity hardware):

python moo384.py --experiment --conditions synthetic semantic \
    --runs 20 --ticks 20000 --delay 0 --seed 1234 \
    --profile contrarian-sleeper \
    --out runs/exp-v1.6-contrarian-sleeper-long-soak