Unique Feature

The Router

Who runs each piece of work, on which model, at what effort, and how you ask for it by name.

Every time LifeOS hands a piece of work to an agent, something has to decide which model that agent runs on, how hard it should think, and what it is allowed to touch. The Router is that decision, made the same way every time, from one registry, and shown to you afterward beside what actually ran.

Why it exists

Model lineups change every few weeks. Vendors rename things, a new tier lands, a price moves. If the name of a model lives in your prompts and agent files, every one of those changes is a hunt through your own system, and the copy you missed quietly runs the old thing. The Router exists so that no prose in LifeOS ever names a model, and a lineup change is a one-line edit that every surface follows.

It also exists because you should be able to ask for intelligence in plain words. “Send this to Astra” or “max intelligence on this” should mean one specific, checkable thing, not a guess.

How it works

Agents are named for the model they run. Astra runs OpenAI’s flagship. Fable runs Anthropic’s top tier. Sol, Terra, and Luna run the OpenAI worker models that carry their names. When you say an agent’s name you are naming the carrier, so nothing on screen can be mistaken for something else.

Lanes, never IDs. Each agent carries a lane key. One registry maps the key to today’s model, and a daily sync moves that forward within the same family and class. A model ID that appears in prose is treated as a bug and flagged by a check.

Levels are aliases. “Max intelligence” is a thing you say, not an agent’s name. The registry maps that phrase to whichever agent runs the strongest model right now. When the lineup changes, the mapping moves. No agent is renamed to match.

Effort is the dial that moves. Which model runs is settled by configuration. What changes with the work is reasoning effort, set per session or per agent. A run never decides its own model.

The trail shows what ran. Beside every dispatch the status line marks whether the vendor’s own log observed the lane that was asked for, whether a different model answered, or whether a wrapper answered without running the real thing at all.

What it is not

The Router is not a classifier. An earlier version of LifeOS tried to predict how much effort a prompt deserved before doing the work; that was retired, because effort is discovered from the work itself. The Router decides who carries a piece of work, never how much a prompt is worth.

In practice

bun LIFEOS/ROUTER/Router.ts lanes                     # every agent → lane, vendor, effort, sandbox, access
bun LIFEOS/ROUTER/Router.ts resolve max intelligence  # "max intelligence" → Astra → its lane
bun LIFEOS/ROUTER/Router.ts status                    # fails when an agent has no lane or an alias dangles

A new agent is a file named for its model; the check fails until the registry knows its lane. A new level is one alias. A rename is rare and has a worked example in the history.