Identity Switching

How OctoMY™ lets you keep multiple identities and robots on one device and switch between them at any moment — without losing data, without restarting the app.

Why this exists

One person may operate several robots, and one machine may host several people's identities — a workshop computer, a shared family hub, a developer's laptop with both a personal and a work identity. OctoMY™ treats identity as something you can change while the app is running, the same way you'd switch a window or a profile.


The mount stack

At any moment OctoMY™ has up to two identities active, layered on top of each other:

Layer What's there Required?
Device The machine the app runs on Always
Sentient Your cryptographic identity — the human operator Always (a shadow Sentient is auto-created on first boot)
Node A robot personality (Agent / Remote / Hub) owned by the Sentient Optional — you can be "logged in" as a Sentient with no Node selected

The Sentient's data lives in an encrypted hive named SID-<your-id>. When you select a Node, its hive (NID-<node-id>) is mounted on top of the Sentient hive. Switching either layer is what we mean by "identity switching."

See also: Sentient Identity for what a Sentient is, and Personality for what a Node Personality is.


When you switch

You'd switch the Sentient when You'd switch the Node when
Moving between work and personal identities Picking up a different robot you already own
Operating a shared device for a different person Switching from a fleet agent to a development sandbox
Recovering a Sentient from a backup phrase Moving the same Sentient between Agent / Remote / Hub roles
Upgrading a shadow Sentient to a full one Trying a new Node Personality without losing your current one

A Sentient switch is the heavier of the two: every subsystem that depended on the old Sentient (vault, contacts, keystore, mounted hive) is torn down and rebuilt against the new one. A Node switch reuses the active Sentient and only swaps the Node layer.


Where the switch happens in the UI

Place What you can switch from there
Lanyard (top-right of every window) Both — three controls left-to-right: a bare-glyph hive button (visible only when a hive is mounted; opens HiveLobbyActivity), the sentient chip (opens SentientLobbyActivity), the node chip (opens NodeSelectionActivity). The legacy caret/dropdown menu was retired by the Activity Header Makeover; hive-level switching now lives inside SentientLobbyActivity since hives are scoped to sentients
Sentient Selection activity Sentient — picks from every Sentient hive registered on this device
Node Selection activity Node — picks from every Node owned by the active Sentient
Active Mounts activity Diagnostic view — shows what's mounted right now, useful when something feels stuck

The Lanyard is the everyday surface. The selection activities are what the Lanyard pushes when you have more than one option, and they're also where you go when you want to create a new Sentient or Node.


What happens during a switch

Switching is one operation made of six steps. You see a spinner; behind it the app is making sure nothing gets corrupted by the change.

Step What it does Visible?
Freeze Input is blocked, the Lanyard greys out, a spinner activity appears Yes — you see the spinner
Save Any subsystem with unsaved writes (address book, vault, keystore, registries) is flushed to disk first Brief delay; no UI change
Teardown Comms sessions close, the old Node hive unmounts, then the old Sentient hive unmounts No
Mount The new Sentient hive activates; vault/keystore/comms reconfigure; if it's a full switch (not just Sentient → Sentient), the new Node hive mounts on top No
Reconfigure Signal cascade: every widget that displays "current Sentient" or "current Node" refreshes itself; discovery clients reconnect You see UI elements update
Unfreeze Spinner disappears; you land on the home activity of the new identity Yes — you're back in control

The order is deliberate. Save before Teardown is what prevents data loss — and after spec Phase 11b it's not just an attempt, it's a guarantee. The Save phase fires save() on every dirty subsystem (AddressBook, SentientVault, KeyStore, SentientRegistry, HiveRegistry) and runs the UI event loop for up to 5 seconds so the background AsyncStore workers can drain their queues before the volume tears down. Earlier versions used a fire-and-forget pattern that raced with the worker thread and could lose writes; the bounded-wait pump closes that gap.

Teardown reverses the Mount order so dependencies unwind correctly. If anything fails during Mount, the service automatically rolls back and restores the previous Sentient/Node — you never end up in a half-switched state.


Safety: open files and unsaved work

Before a switch begins, the app checks two things:

This is why a switch is safe even mid-edit: the app refuses to pull the rug out from under you without asking.


Switching vs creating

Switching only moves you between identities that already exist on this device. Creating a new identity is a separate flow:

To... Go to...
Switch to an existing Sentient Lanyard → Sentient → pick one
Create a new Sentient Sentient Selection activity → New
Switch to an existing Node Lanyard → Node → pick one
Create a new Node under the current Sentient Node Selection activity → New
Import a Sentient from another device Sentient Selection activity → Import, then complete the migration flow

A successful import lands the imported Sentient hive alongside your existing ones — the same selection activity now lists one more entry. From your point of view it's just another switch target.


What stays vs what resets

When you switch identities mid-session:

Stays Resets
The app itself (no restart) The set of contacts visible — each Sentient has its own
Window layout and pinned activities The list of Nodes you can pick — each Sentient owns its own
Open background services (batch queue, etc.) Discovery / pairing state — re-runs under the new identity
OPAL task history across the app (recorded per-Sentient) Active OPAL execution context — bound to the previous identity

If you had a long-running OPAL task in flight, the switch will wait for it to finish (or fail if it can't), since tasks run in the context of the Sentient that started them.


Common questions

Can two Sentients be active at the same time? No — at most one Sentient is mounted at a time, and at most one Node on top of it. Multiple identities exist on the device; only one is active.

What if my Sentient has no Nodes yet? You can still operate as that Sentient — you just have no Node-specific data (no robot personality, no per-Node config). The Lanyard shows your Sentient with no Node selected. Create one from the Node Selection activity when you need it.

Is switching the same as logging out? Closer to "switching profiles." There's no central account, no log-out / log-in dance — switching simply unmounts one identity and mounts another, all locally.

Can I switch while a robot is connected? Yes; the Comms layer tears down cleanly during Teardown and reconnects under the new identity during Reconfigure. The peer on the other end sees you as a different identity afterwards (because you are).


Component reference

Component Role
IdentitySwitchService Orchestrates the six-phase switch; emits phase / finished / rolledBack signals
SwitchReadiness Pre-flight check — Ready, SavePending, OpenFiles, Busy, NoChange
Lanyard Top-right widget showing active Sentient + Node; entry point for switching
SentientSelectionActivity Pick / create / import a Sentient
NodeSelectionActivity Pick / create a Node under the active Sentient
ActiveMountsActivity Diagnostic view of currently-mounted hives
OpenFileTracker Detects activities holding files open on a hive about to unmount
OpenFilesActivity UI for the open-files-pause case
HiveSession The session that owns the mount stack