I did not start with an architecture diagram
I started building Orbit because I thought personal AI was cool and wanted to understand how it actually worked. The first version in my head was basically a model, a phone number, and a few integrations. How hard could it be?
Then every useful thing I added turned into another question. How does Orbit know who texted it? What should it remember? How does a reminder survive a restart? What does a yes actually approve? How does it coordinate with someone else without handing over your entire life?
Orbit became a collection of small systems because I kept finding jobs I did not want the model to fake. This is what happens when you send it a message today.
It starts with a text
Orbit lives in Messages because I wanted asking for help to feel boringly easy. You text it the same way you would text a person. Gateway picks up that message, keeps the conversation in order, and handles the trip between Messages and the rest of Orbit.
Before a model reads anything, Janus checks who sent it and whether that person is actually allowed in. Phone numbers are not account IDs, a browser does not get to choose who you are, and STOP does not need artificial intelligence. That work is intentionally boring.
Then Orbit has to figure out what you meant
Once Janus lets the message through, Pluto tries to understand what you are asking. This is the part with the model, but the model does not get one giant dump of your life. Pluto assembles a small amount of context for that specific turn: the recent conversation, relevant memories, your local time, and anything useful from connected accounts.
Charon handles the connected-account part. It turns email, calendar events, and documents into small attributed pieces that Pluto can retrieve when they matter. A sentence from an email stays a sentence from an email. It does not quietly become a permanent fact about you.
Memory works the same way. The model can notice that something might be worth remembering, but normal code checks the evidence before it becomes durable. Echo carries a different kind of context: how you want Orbit to speak, write on your behalf, and decide whether something is worth interrupting you for.
Choosing what to remember is only half the problem. Before every answer, Pluto also has to choose which saved memories fit into that turn’s small context. Orbit now checks that selection with repeatable examples and a second policy that runs in the shadows, where it can be measured without touching the real reply.
Understanding something is not the same as doing it
This distinction caused a surprising amount of Orbit to exist. A model saying “I’ll remind you” does not mean a reminder is real. A model saying “done” does not mean Google accepted a calendar update. A confident sentence is not a receipt.
Argus holds anything that has to survive the current conversation: reminders, watches, background work, and the result that needs to come back later. Vulcan handles changes outside Orbit. It freezes the exact action first, shows you what will happen when approval is required, and executes those same stored bytes after you say yes.
Mercury handles the weird new case where the missing piece belongs to someone else. Two connected Orbits can coordinate something narrow, like finding a time that works, without either assistant getting access to the other person’s calendar, memory, or inbox.
Then it has to come back
Everything eventually returns through Gateway. That might happen two seconds later as a normal reply, tomorrow as a reminder, or after a longer piece of work finishes. Orbit is not done because a model produced some text. It is done when the right person actually receives the result.
That sounds obvious. I still managed to learn it the hard way when Orbit spent an afternoon looking extremely busy while a provider limit prevented replies from leaving the system.
Why split it up?
I did not set out to build a mythology-themed collection of services. Each boundary came from a question I wanted a boring, inspectable answer to. Who is this? What does Orbit know? What is it allowed to remember? Does this task actually exist? Which exact action did you approve? Did the result make it home?
The model is still the reason Orbit can understand a messy request and do something useful with it. It just does not have to pretend it is also a database, identity system, scheduler, policy engine, and delivery receipt.
This is the current version, not the final one. I am still building it because every answer seems to uncover a more interesting question underneath it.