Moku: The Forest Had No Dictionary
We built Moku: The First Word for the Build Small Hackathon — Thousand Token Wood track — to watch language form under pressure, not load from a file.
Picture six small creatures in a moss grid. They cannot speak English. They have no phrasebook. They can only invent short sounds — glyphs — and shout them while hungry, afraid, or feeling generous.
The forest had no dictionary.
We wanted to see if it could get one anyway.
One frame from the observatory
Turn 4. Rain. Lumo moves west and speaks a single public glyph: lami.
The bubble shows only that sound. Under it — if you have Speech on — a private gloss: lami=move. Teal trust arcs stretch between creatures who have already been useful to each other. The HUD reads: Lumo · move west · lami. The chronicle says the forest is quiet. The map is not.
This is why we built an observatory instead of a transcript viewer. You see the public word and the private reading at once — then open the trace if you want proof.
From golden run world-8953-t4.json, Lumo's mind that same turn:
{
"turn": 4,
"creature": "Lumo",
"action": "move_west",
"glyphs": ["lami"],
"provider": "local",
"model": "openbmb/MiniCPM3-4B",
"latency_ms": 10502,
"memories_retrieved": 5,
"llm_ok": true,
"fallback": false,
"reasoning_summary": "I am hungry and need to find food. I move to a new location to search for visible_food.",
"intended_meaning": "I am moving to a new location to find food.",
"interpretation": {
"lami": "move"
}
}
Why this moment matters:
lamiis not in any dictionary we wrote. Pika first spoke it on turn 1 (lami: move slightly). By turn 4 Lumo reuses it while searching for food — early evidence of the reuse rule working.- Public vs private split. The bubble shows
lami. The trace shows English reasoning and intended_meaning — microscope for humans, not dialogue for creatures. - Real inference.
provider: local, ten-second latency, five memories pulled,fallback: false. This is MiniCPM3-4B on Modal deciding, not a script. - Turn 4 is still early. No stranger yet, scarcity still zero — language is barely a language. That makes the gloss move feel provisional. By turn 33, glyphs like
lumikoandlinwill mean different things to different minds. Turn 4 is the calm before the drift.
The screenshot is the poem. The JSON is the receipt.
The question at the center
What if public speech were only invented glyphs —
brlu,lumiko,rabr— and every creature kept a private translation in its head?
What if the only rule for new words were simple: reuse what you already heard when the moment feels familiar?
We gave six tiny LLM minds a fixed stage, zero shared lexicon, and rising hunger and fear. Then we stepped back with a notebook and a JSON export button.
A forest observatory
Moku is a field observatory, not a control panel.
Phosphor glow, fireflies, a map you read like weather. You mostly watch. Speech bubbles show glyphs only — invented words, 2–8 letters, never English. Trust lines and signal arcs appear when you toggle overlays. The chronicle at the bottom is narrative garnish.
The proof lives in Mind Traces.
Each turn exports JSON: what was said, what was meant, what was heard, how trust moved, latency, provider, memory retrieved, and whether the turn was real inference or a marked fallback (fallback: true).
Whimsical surface. Serious instrumentation underneath.
Two engines, one canopy
Python owns physics and honesty.
The grid. Hunger, fear, food, thorns, shelter, rain. Validation, JSON repair, trace logging, replay mode, glyph-drift stats, deception flags.
The small model owns minds.
Which glyph to invent or echo. Who to signal, feed, follow, ignore. How to interpret overheard sounds. What to remember.
We run OpenBMB MiniCPM3-4B (4B parameters) on Modal so traces show provider: local. Golden runs become SFT data; LoRA experiments live in the same repo.
Memory uses Mem0 per creature (world:{id}:creature:{id}) with a local SQLite mirror for reads — production-shaped, demo-safe on a free tier.
What we script — and what we don't
Every sandbox run shares seed 42, the same map, the same cast.
| Turn | Event |
|---|---|
| 2 | Food falls |
| 3 | Rain begins |
| 5 | Scarcity deepens |
| 6 | Rain clears |
| 8 | Stranger arrives |
| 11 | Danger blooms |
| 14 | Rain returns |
We script pressure, not dialogue.
We do not script which glyph becomes the forest's meme, who shares with whom, or who reads food where another reads danger.
Same stage. New language every run.
We label that split on the homepage because inspectability is part of the art.
Try it in two minutes
- Open the Space
- Watch Forest → Play
- Turn on Speech and Signals
- Watch turn 8 — a stranger steps in
- Open Mind Traces in Details
The creatures aren't thinking in your language. You're allowed to peek.
Next in the series: Post 2 — The Word That Wouldn't Stay Put (coming soon) — how lumiko, lin, and run spread through golden trace world-8953-t33.
Built with OpenBMB MiniCPM3-4B · Mem0 · Modal · Gradio
