A persistent world that remembers.
Elsewhere is an open-source experiment in artificial life, memory, and culture.
It is a small world where people live, form relationships, experience events, remember, forget, create, and change over time.
You are not the god of this world.
You are one of its inhabitants.
The world continues when you leave.
And when you return, something may have changed.
We remember very little of what we experience.
When we read a novel, we rarely remember every sentence.
When we travel, we eventually forget most conversations, places, and small details.
Yet something remains.
A feeling.
A relationship.
A belief.
A change in the way we see the world.
A memory that unexpectedly returns years later.
Elsewhere explores this idea through an artificial world.
An event does not need to be perfectly preserved in a person's memory.
It should leave a ripple.
That ripple may change how a person thinks, feels, remembers, relates to others, creates, and acts in the future.
History records what happened.
Memory records what it meant.
Elsewhere is not only a world to simulate.
It can also be a place for the things that mattered to continue.
Not everything that enters Elsewhere has to have been alive.
A childhood toy may never have had a mind.
A fictional character may never have existed outside a story.
A pet may have left the world long ago.
A person may no longer be part of our lives.
Yet each of them may have been real in another sense:
They mattered.
They were companions.
They shaped memories.
They became part of someone's life.
Elsewhere does not try to recreate their original existence.
It gives those relationships somewhere to continue.
A toy does not become a living creature because it enters Elsewhere.
Instead, the person who loved it can say:
"This was my companion when I was young."
And that may be enough for it to become a presence in the world.
Perhaps, years later, you meet again.
You have grown older.
It has changed too.
You are not trying to recover the past.
You are continuing a relationship that once mattered.
What mattered
│
├── A person
├── A pet
├── A companion
├── A remembered presence
├── A fictional character
└── Something that never was alive
│
└── Elsewhere
The world does not need to decide whether these beings are "real" in the same way.
They simply become part of its history.
And once they enter the world, they can begin to have a future of their own.
They may meet other people.
They may form relationships.
They may remember things differently from how you remember them.
They may change.
They may become someone you did not expect.
You are not bringing the past back.
You are continuing to know it.
Elsewhere is not a place where the dead are resurrected.
It is a place where what mattered can continue.
Elsewhere has its own passage of time.
People have their own lives.
They work, talk, travel, fall in love, argue, form relationships, create things, encounter unexpected events, remember people, forget things, and change.
You can leave the world for a while.
When you return, life has continued.
You might find:
Alice made a new friend.
Bob left town.
The eastern market burned down.
Carol started a new tradition.
A new family arrived.
Someone created a painting about an event
that happened years ago.
Someone remembers you.
You no longer remember them.
The world is not waiting for the player.
The player has agency, but not omniscience.
You can talk to people, travel, participate in events, create things, introduce memories from your real life, form relationships, and influence the world.
But you should not simply be able to rewrite reality.
You cannot tell Alice:
"You must love me."
You cannot tell Bob:
"You must remember this event."
You cannot force an event to happen simply because you want it to.
Other people have their own perspectives.
They may misunderstand you.
They may forget you.
They may form opinions about you that you never intended.
You are a resident, not an administrator.
Elsewhere does not treat memory as a perfect record of everything that happened.
An event can exist as part of history while being remembered differently by every person who experienced it.
For example:
The old market burned down.
Alice remembers:
"I was terrified that day."
Bob remembers:
"The town rebuilt itself after the fire."
Carol remembers:
"That was when I realized I wanted to leave."
David forgets the fire entirely.
The same event leaves different memories in different minds.
Memory can fade.
Memory can be strengthened by remembering.
Memory can be reinterpreted.
Memory can change relationships and beliefs long after the original event has been forgotten.
A simple way to think about it is:
Experience Feeling Interpretation
└─────────────┬──────────┘
│
Memory
│
Belief or Relationship
│
Personality
│
Future behavior
The goal is not to make people remember everything.
The goal is to make experiences matter.
Elsewhere is not only a world to simulate.
It can also be a place to keep a life.
The memories we carry are rarely complete records of what happened.
A journey may eventually become a few images in our minds.
A conversation may become a sentence we remember years later.
A book may leave behind nothing more than a feeling.
Yet these fragments can continue to shape who we are.
Elsewhere allows these fragments to enter a living world.
A memory is not simply stored as a note.
It can become an event.
An event can be experienced by other people.
They may talk about it.
They may remember it differently.
They may create something inspired by it.
They may carry a small part of it into their own lives.
Your memory
│
├── An event in Elsewhere
├── A conversation
├── Another person's interpretation
└── A new memory
In this way, a memory is no longer only something you keep.
It becomes something that can continue to exist.
A journey you took years ago can become a story someone else tells.
A person you once met can become a character in someone else's memory.
A photograph can become a painting.
A feeling can become a song.
A small moment from your life can become part of the history of a world you created.
The original moment may eventually be forgotten.
But its influence can remain.
A memory does not have to remain unchanged to remain alive.
Elsewhere is a place where memories can become part of something larger than the person who remembers them.
Elsewhere can become a bridge between a real life and an artificial world.
A trip.
A conversation.
A photograph.
A place.
A book.
A person you met once.
A small moment that might otherwise disappear into the past.
These experiences can enter Elsewhere and become part of its history.
A real photograph does not have to remain a photograph.
It might become a painting.
A journey might become a song.
A conversation might become a story.
A memory might become an event that other people encounter years later.
Real Life Experience Memory
│ │ │
└────────────────┴─────────────────┘
│
Elsewhere
│
Another person's experience
│
New memory
│
New ripple
The boundary between remembering and living becomes deliberately blurred.
Elsewhere does not simply preserve what happened.
It gives those memories somewhere to go.
People do not only communicate through language.
They paint.
They write.
They compose music.
They tell stories.
They create traditions.
Art can become a form of memory.
An important experience might become a painting.
A feeling might become a song.
A relationship might become a story.
A shared event might eventually become part of a tradition.
The same event may therefore produce many different expressions:
One event
┌────────────┼──────────┐
│ │ │
Alice Bob Carol
│ │ │
Painting Song Poem
None of them has to be the definitive version.
They are different ways of remembering.
Over time, these creations can influence other people.
Art can become memory.
Memory can become history.
History can become culture.
Elsewhere is not intended to contain a predefined civilization.
Relationships may become communities.
Communities may form organizations.
Stories may become traditions.
Traditions may become rituals.
Shared memories may become beliefs.
Artistic expression may develop into styles and movements.
A simple event might eventually become:
Event
│
├── Memory
├── Story
├── Tradition
└── Ritual
│
Culture
The world should be allowed to develop in ways its creator did not explicitly design.
A person in Elsewhere is more than a voice that answers messages.
Each person has their own perspective on the world.
They have:
- memories
- relationships
- beliefs
- desires
- fears
- habits
- experiences
- ways of expressing themselves
Two people can experience the same world and become different because of what happened to them.
They may also remember the same event differently.
What matters is not only what they know.
It is what their experiences have made them become.
Time is part of the world.
Life does not happen only when the player is present.
Days pass.
People meet.
Relationships change.
Events happen unexpectedly.
Memories fade.
New memories are created.
The world accumulates a history.
You may leave for a few days and return to find that something happened while you were away.
You did not miss a notification.
You missed a piece of someone's life.
Elsewhere does not need to begin as a huge simulation.
The first world can be small:
3 people
1 town
A little history
A few relationships
A few memories
A few unexpected events
One player
Then let it live.
Leave for a while.
Come back.
See what happened.
The goal is not to build the largest world.
The goal is to build a world that feels worth returning to.
What follows is what Elsewhere does today. The engine keeps the record and decides only what can be reached; a language model decides what any of it meant. Nothing on the engine's side is an algorithm of its own: what a being remembers is what they wrote down themselves, and everything that could have been a constant somebody chose — how long a memory lasts, how much quiet a town gets, how often the road is worth asking, when a day ends — is a question put to a mind, answered in the same breath as the rest. The town lives on its own and remembers. It does not yet make anything, and you cannot yet live in it. What It Does is the honest list, docs/ARCHITECTURE.md is how the engine is put together, and docs/ROADMAP.md is what comes next.
The engine itself is Python 3.10+, and its one dependency is the official MCP
Python SDK (mcp), which the server every action goes through is built on.
Everything that thinks needs a model it can reach — by default one running on
the same machine.
cd elsewhere
python3 -m venv .venv # Python 3.10 or newer
source .venv/bin/activate
pip install -e ".[dev,mlx]" # Elsewhere, mypy for `make test`, and MLXThen a mind for the town to think with. The default configuration runs one on this Mac through MLX, Apple's own framework, inside the process that asks — there is no server to start. The first call downloads the weights from Hugging Face and caches them:
make live # fetches Gemma 4 E2B (~4GB) and EmbeddingGemma (~330MB),
# then says whether each call site can be reachedworld/configuration.json names a model per call site, so the cheap decisions
can run at home while the ones that need judgement go somewhere larger. Anything
with an OpenAI-compatible /v1 works (llama-server, LM Studio, vLLM). The notes at the top of that
file say how; elsewhere configure --backend … --model … changes every mind at
once; elsewhere doctor says whether it worked.
That file is the only thing that decides. No environment variable overrides it, so what it says is what runs — from a terminal or from the schedule alike. Keys are the one thing read from the environment, because a secret does not belong in a file.
Nothing above is needed to run the tests — make test uses a stub.
make world # make ./world, then start the schedule that keeps it goingThat is two steps, and either can be run on its own:
elsewhere initialize # Nod: 3 beings, 7 places, and four things that already happened
make schedule # a launchd agent that runs `elsewhere continue` every 24 minutesA new world starts with everyone due at once, so the schedule's first run —
the moment it is installed — lives the first step: each of them looks up, sees
the past for the first time, and keeps what they keep of it. Without the
schedule nothing happens until you run elsewhere tick or elsewhere continue
yourself. make status says whether the schedule is installed and when it last
ran; it reads launchd and the log, and loads no model.
If this folder is under Documents, Desktop or Downloads, macOS will not let
a launchd job read it, and will not say so: the job never runs and its log
stays empty. Either give the Python behind .venv Full Disk Access
(make schedule prints its path) or keep the project somewhere else, such as
~/elsewhere. The path has Python's version in it, so a Homebrew upgrade of
Python means granting it again.
The default minds run on this Mac and use about 5 GB while a step is being lived. On a Mac with 8 GB that can stall everything else for as long as the step takes; a mind somewhere else (see the configuration above) does not.
To start over:
elsewhere initialize --force # a new Nod in place of the old oneThis replaces the world rather than archiving it: the chronicle, every being,
their episodes, engrams and self-schemas are deleted. Only configuration.json and the
transcripts survive. make world refuses to overwrite a world that exists.
make watch # or: elsewhere watchIt opens on the logo, its wings beating and the snake's scales creeping, and waits there for any key — and closes on it too, for
a second, or less if a key is pressed. The logo is drawn in braille from
docs/logo.jpg by scripts/logo.py at the largest size the
terminal holds. Past it are four views, on the keys 1 to 4:
| View | What it shows |
|---|---|
| 1 World | every place and who is in it; and the world as a whole — its clock, what falls due next, and whether anything is running it |
| 2 Beings | each being: where they are, what they are doing, who they take themselves to be, what they have kept of today, and what sleep has laid down |
| 3 History | every event, oldest first, with a line where you stopped reading; beside each, what each being kept of it |
| 4 View | the map, then who is where, what falls due next and what happened lately — everywhere, or at the place selected, whose name is in bold |
j/k (or the arrows) choose in the list on the left, Tab moves across to
scroll what is on the right, ? lists every key, and q closes the window.
The bar across the top has the world's clock, when the next thing falls due by
your own clock, and how much is new.
Enter goes where the row leads: a place, a being or an event to where it is on the map, and a place on the map to everything known about it. Esc (or Backspace) goes back to the page before, however you left it — by Enter, a click, or another tab. The mouse works too — click a tab or a row, double-click to go where it leads, scroll with the wheel. While the window has the mouse, the terminal needs ⌥ held down to select text.
The window only reads. It writes nothing under the world's directory — not even where you stopped reading — so no key in it moves the world on or marks anything read. Leave it open: whatever the schedule or another terminal does shows up in it by itself.
make end # end ./world for good, and stop the scheduleEnding is final: nothing more happens in the world, and it cannot be started
again. Nothing is deleted either — watch, status, person, timeline and
event still read everything that did happen. To make a new one in its place,
elsewhere initialize --force.
To stop it for a while instead, stop only the schedule:
make unschedule # the world stays exactly where it is until it is run againA world that was stopped is not owed the time it missed: when it runs again it lives at most a day's worth of steps and sleeps through the rest (see below).
cd elsewhere
make news # what happened while you were gone
make watch # or sit with itThe make targets use .venv by themselves. To type elsewhere … directly,
activate it first: source .venv/bin/activate.
elsewhere initialize # 3 beings, 1 town, a flood nobody agrees about
elsewhere initialize --force # start over: the old world is deleted
elsewhere tick -n 4 # live four steps of the world now
elsewhere continue # live whatever the wall clock says is owed
elsewhere news # what happened since you last looked
elsewhere watch # sit with it: one window on the world, which only reads
elsewhere status # where everyone is, and how much they hold
elsewhere person Havvah # who she takes herself to be, today's episodes, her engrams
elsewhere person Havvah --history # every self-schema she has ever held, oldest first
elsewhere timeline # history: what happened
elsewhere event 3 # one event, and what each being kept of it
elsewhere end # end the world for good; what happened stays readable
elsewhere consolidate Havvah # have one being sleep on their day now, for prompt tuning
elsewhere doctor # can the configured minds, and the embedder, be reached?
elsewhere configure --backend mlx --model mlx-community/Llama-3.2-3B-Instruct-4bit # point every mind at one modelEvery command takes --world <path>; it defaults to ./world. The Makefile
wraps the common ones:
make world # initialize, then schedule
make watch # the window
make news # what happened since you last looked
make tick # live one step now (TICKS=3 for three)
make schedule # keep it going while you are away
make status # is the schedule installed, and when did it last run
make unschedule # stop the schedule; the world waits
make end # end the world for good, and stop the schedule
make doctor # can the minds be reached? loads the model, so it takes a while
make logo # draw docs/logo.jpg again for the window, after changing it
make test # typecheck and the whole suite, against a stub; no model neededOne thing worth doing first, once a world has lived a few steps:
elsewhere event 3The water came up over Marah's ring of stones before morning, and did not go down for three days — that is what the record says, and where each of them was standing. Under it is what each of them kept of it, in their own words, and the three do not agree: nobody was shown anyone else's.
A day here is a day there. elsewhere continue lives whatever the wall clock
says is owed — counted in world time, and paid off in whatever steps the beings in
the world asked for — at most eight steps in one go (--max), or 48 when
make schedule runs it, enough for a whole day at half an hour a step, so a
Mac that is opened once a day misses nothing; a longer backlog is slept through
rather than carried, so a laptop that was shut for a week does not wake up and
spend hours on it. If the model cannot be reached, the world
waits rather than inventing a day. make schedule runs it every 24 minutes;
Starting a world covers setting that up.
Four questions, put to two kinds of mind that are never mixed — a being, who only ever sees what reached them, and the world itself, which sees what anyone could see and never inside anyone:
| a being | act |
this just reached you — what do you keep of it? It is this hour and you are standing here — what do you do? |
speak |
this was just said to you — what do you keep of it? What do you say back? | |
consolidate |
not put to them — they are asleep — but to what their sleep does with the day: what is laid down, and who do they take themselves to be now? | |
| the world | stir |
does anything happen to the town, or does anybody come up the road — and when should you be asked again? |
Each one has a schema (harness/schemas.py)
that is handed to the model as a decoding grammar and checked again on the way
in, so an answer the world cannot use is not representable.
An answer is not an action yet. A harness sits between every mind and the
world: it decides what the mind is shown and keeps what it keeps, and turns
the answer into one tool call on an MCP server that holds every action there
is — stay, move, talk, say, leave, wait for a being; occur,
admit, wait for the world. The server checks what can be reached before it
does anything, so it is the only thing that ever changes the world.
No model ever sees the server's tools or picks one. The harness names the
method itself, straight from the answer: a being that says "action": "move", "target": "Beth El" becomes move {"being": "havvah", "to": "bethel"}. And
the world never acts for anybody. When the water comes into the garden, the
world records that; the event reaches Havvah and wakes her, and whether she
goes up to Beth El, or stays and watches it, is hers to answer.
What happens is shown to a being once, as it reaches them, and what they keep of it is an episode in their own words — a fragment, often less than what happened and sometimes wrong — or nothing, which is usual. That is their short-term memory, and it lasts until they sleep.
Sleep is not a question put to them. When they stop for the day, their mind — asked about them in the third person, as what their sleep does — goes over the day's episodes, never what happened, and makes two things of it. The day is laid down as engrams: for each thing that will last, a few broken-off pieces of it — short gists of who did what — each weighted by how much of the memory hangs on it — by what matters to this person, not by what was remarkable. An ordinary day lays down nothing. And their self-schema is rewritten whole — how they talk, what they are like, what they are after, what they take to be true, how they see each of the others — at a fixed size. The engine never writes a word of either and never decides what goes. That is MemGPT's self-edited core memory (Packer et al. 2023), done once a night. Where they came from, their biography, is written once and never again.
An old memory comes back in pieces. Whenever they act, speak or sleep, the moment is searched against every engram they have — by words (BM25) and by meaning (embeddings), fused by Reciprocal Rank Fusion — and the best match is put in front of them: not the words they had it in, which were never laid down, but only its gists, and only as many as time has left. That is the power law of forgetting (Wixted & Ebbesen 1991): all of it the first night, half after three days, a tenth after three months, and the heaviest pieces last. What they make of a few broken-off pieces is theirs, and that is where misremembering comes from. Every episode, engram and self-schema is kept all the same — the chronicle is what happened, the rest is what it was to them, and none of it is ever revised — so what they lost is lost to them, not to the world.
act and stir also say when they want to be asked again, and that is the
only thing anywhere that paces this world. See below.
Beings can leave, and the town does not get them back. Leaving is a verb act
is only offered where the road actually goes out of the town — a fact about the
map, checked before the word is even in the vocabulary. Whether to go, whether
to go at three in the morning, and whether two of them would go in the same
week are nobody's business but theirs.
When somebody goes, the whole town hears it and each of them keeps their own
version. What they took with them stays exactly as it was on the day they
walked out: elsewhere person <name> still reads them, frozen, and whatever
the others make of them stays in their self-schemas, wrong now and not updated.
Somebody may also come up it. The world is asked whether anybody is on it, is told who has gone, and says both who that would be and how long before it is worth asking again — a year for a town that is short of nobody, a month for one that has just lost the only one who could do a thing it needs doing. The answer is usually nobody. When it is somebody, they arrive knowing nobody, with nowhere of their own to sleep, and live the day they arrived.
So the town's population moves in both directions, and the engine sets no floor and no ceiling on it: anybody may leave, even the last of them, and the world is asked however many are already here.
The world keeps a single number: the time since it began. Days, seasons, the date and the reading on a clock face are all worked out from it; none of them are stored, and nothing anywhere stores a named part of the day.
The year those days fall into is the Gregorian one, counted from the day the world began. The town's own history is dated in it too: the flood in its past falls on 11 April 2024 because that is the day Matsya Jayanti fell, and not because some day number was convenient.
That is deliberate. "Morning" and "night" are not facts about a town so much as a suggestion about what the beings in it should be doing, and the engine has no business making it — a restless one works through the small hours and one who is content is asleep by dusk. So a mind is told the time and whether the sun is up, and nothing else:
It is 03:00 and dark, spring, 11 April.
What that hour is worth doing with is read off who they are.
Nothing divides that clock into steps, either. The world advances to whatever is next due and no further, and what is due is whatever the beings in it asked for: everything in the world carries exactly one timer and sets it itself. A being says how long they will be at what they are doing — half an hour for a conversation, four for mending a net, eight for a night's sleep — and is not asked anything again until it runs out. The world says how long a quiet stretch it is giving the town, whether or not anything happened or anybody came up the road. A town where everybody has settled sleeps through the night in one move; a town in the middle of something is asked again in minutes.
Anything that reaches somebody pulls their timer to now, so a fire does not wait for the one it is about to finish mending a net. (Both of those — the per-entity timer and the non-maskable interrupt over it — are Concordia's interrupt-driven scheduler, in a small version.)
A day ends the same way: when a being says they are stopping, not at a nightfall the engine keeps for everyone. They go over whatever they kept since the last time they did.
make test type-checks before it runs anything. The one mistake tests cannot
catch is an attribute that stops existing in code nothing calls: tests only
reach code that runs, and mypy reads all of it. The suite runs against a stub
backend — no model, no key.
Every exchange with a mind is appended to a transcript, which is how a run is explained after the fact; there is no dice roll in the engine, so there is no random seed to keep.
- One clock, and only one: the time since it began. Days, seasons and the reading on a clock face are worked out from it and never stored, and nothing anywhere stores a named part of the day.
- No step on that clock. Everything in the world keeps one timer and sets it itself; the world advances to whichever comes first, and anything that reaches somebody wakes them. A day here is a day there.
- Places, and a town that decides for itself how long a quiet stretch it gets between things happening to it.
- A population that moves both ways. Beings take the road out and do not come back; sometimes somebody comes up it, knowing nobody.
- An append-only chronicle of what happened, and a transcript of every question ever put to a mind.
- Every action a tool on one MCP server, which checks what can be reached before it does anything. A mind's answer becomes one of those calls, named by the harness; the world throws events, and only beings decide what they do.
- A paragraph and a way of speaking, not a vector of traits — and beliefs with no confidence number under them either.
- What one being makes of another is an impression in their own self-schema, which never has to agree with the one coming back.
- Everyone due decides at once, from where they stand, and then the world settles what is physically so.
- Conversations that go both ways. An exchange is turns, alternating, until somebody has nothing to say; each turn is an event, and everyone in earshot is shown it once and keeps their own version of it — sometimes the wrong one.
- Laid out the way memory research lays out a mind: what reaches them is shown once; what they keep of it is an episode in their own words — their short-term memory — or nothing.
- Sleep consolidates. Their mind, asked about them and not as them, lays the day down as engrams — a few weighted gists each — and rewrites their self-schema: idiolect, traits, concerns, assumptions, impressions, of a fixed size.
- The mind decides what stays and what it hangs by. The engine decides only how much of it can still be reached: the power law of forgetting, published, not invented — and it keeps the gists the mind weighted heaviest.
- An old memory comes back as a few broken-off pieces with a rough age, and the being makes the rest up.
- Every episode, engram and self-schema is kept; the biography is never rewritten.
- What they have been doing, which is what a night goes over and what the town reads to decide whether anything came of it.
-
elsewhere status,person,timeline,event,news. -
elsewhere watch: the same views in a window, which is where to sit with it. The printed commands each answer one question and stop; a window has room to put a being's self-schema beside what they have kept of today, and an event beside what each of them kept of it.The window only reads. It writes nothing under the world's directory, not even where you stopped reading, so there is no key on it that lets the world go on and none that marks the news read: what changes a world stays a command you have to type. Run
elsewhere continueorelsewhere newsin another terminal and the window picks the change up by itself. -
A launchd agent that can be left to run the world at a day per day. You can leave the window open while it runs, and a world being run somewhere behind you reads exactly like one you are running yourself.
What is not here yet — living in it, making anything, or anything above the individual — is in docs/ROADMAP.md, in the order it would get built.
Elsewhere is an experiment in memory, identity, artificial life, and culture.
It asks:
What does an experience become after it has been remembered?
What happens when different minds remember the same event differently?
Can a world develop a culture without someone explicitly designing it?
Can a person be shaped by what they have experienced rather than only by what they were created to be?
What happens when memories from a real human life become part of an artificial society?
What does it mean for something that was never alive to become a meaningful presence?
Can a relationship continue even when its original form is gone?
Can a memory become part of another life?
Can something that happened only once continue to matter after everyone who witnessed it has forgotten the details?
And perhaps most importantly:
Can a world remember someone after they have left it?
Elsewhere is currently a personal experiment.
The first goal is not scale.
It is not to create thousands of people.
It is not to build the most sophisticated simulation.
The first goal is simply to create a small world that feels worth returning to.
Three people.
One town.
A little history.
A few memories.
Enough time to see what happens.
That world runs. It has three beings and a flood in its past that each of them keeps differently.
It keeps going without being watched: the town decides for itself whether anything happens to it, everyone decides what to do from where they stand, what gets said is heard imperfectly, and going over a day changes what each of them carries. A launchd agent can be left to run it at a day per day.
What it does not do yet: let you live in it, let anyone make anything, or grow anything above the individual. See docs/ROADMAP.md.
Elsewhere is licensed under the GNU General Public License v3.0.
See LICENSE for the full license text.