How OctoMY™ gives each node a unique, consistent identity that's both machine-verifiable and human-friendly.
Did You Know?
The name "Personality" was chosen because it encompasses more than just identity. Like a human personality, a node's Personality includes how it looks (identicon and colors), what it's called (generated name), and even how it sounds (voice characteristics). All of this is deterministically derived from a single cryptographic key.
Two layers of identity live in OctoMY™ and they answer different questions:
| Layer | What it identifies | Who has one | Key prefix |
|---|---|---|---|
| Sentient Identity (SID) | The human operator — you | One per person, used across many devices | SID- |
| Node Identity (NID) / Personality | A robot personality — an Agent, Remote, or Hub instance | One per node, owned by a Sentient | NID- |
A Sentient owns one or more Nodes. A Node belongs to exactly one Sentient at a time. The page you're reading is about the Node-side layer — the personality your robot wears. For the human-operator side, see Sentient Identity. For how the two layers are mounted on top of each other and how to move between Nodes, see Identity Switching.
Every OctoMY™ node has a Personality - a set of deterministically generated identity traits derived from the node's cryptographic key. This makes each node unique and recognizable.
| Trait | Description |
|---|---|
| Name | Unique generated name (e.g., "Blue Spark", "Red Nova") |
| Identicon | Visual pattern unique to this key |
| Colors | Primary and accent colors |
| Voice | Text-to-speech voice characteristics |
Personality derives from the node's RSA key pair through deterministic random generation:
The same key always generates the same personality traits. This means:
The identicon is a visual representation of the node's cryptographic identity.
Each node receives a unique generated name combining descriptive words.
Names are generated by the libname toolkit from curated word lists seeded by the key:
Each node has generated colors used throughout the UI.
| Color | Usage |
|---|---|
| Primary | Main accent color, identicon |
| Secondary | Complementary highlights |
| Background | Optional themed backgrounds |
For nodes with audio output, personality includes voice characteristics.
Inside the Node layer itself, Personality is a projection of the Node Identity:
| Aspect | Node Identity (NID) | Personality |
|---|---|---|
| What | Cryptographic key pair | Generated traits |
| Purpose | Authentication, encryption | Human recognition |
| Storage | Keystore | Computed on demand |
| Verification | Mathematical | Visual/auditory |
Personality makes the NID's cryptographic identity accessible to humans. Both belong to the Node layer — they're separate from your Sentient Identity, which is the human operator who owns the Node.
Since personality derives from the key:
If keys are copied to multiple devices:
When LLMs interact with or through a node, personality provides:
When a node starts for the first time, it goes through the "delivery" process to create its identity.
When a node starts, it receives an AppContext containing:
| Component | Description |
|---|---|
| Command line options | Options set at invocation |
| Environment variables | System environment |
| Settings instance | Node settings |
| Base name | Identifying string |
| Base directory | Local filesystem location for this node instance |
| Headless mode | Whether running without GUI |
The base name allows multiple nodes to run on the same computer by creating separate base directories side by side.
All nodes have these components relating to identity:
| Component | Responsibility |
|---|---|
| KeyStore | Asynchronous loading/storing of local key pair, public keys of associates, key generation, and key lookup by ID |
| LocalIdentityStore | Asynchronous loading/storing of local identity (ID, Node Type, Role, Birth Date, Name, Gender) - except the key pair |
| NodeIdentity | Wraps LocalIdentityStore data with proper selectors |
When started for the first time:
After KeyStore activation, the node runs a sanity check:
| State | Condition | Result |
|---|---|---|
| Virgin | No ID exists | delivered = false, UnboxingWizard shown |
| Error | ID exists but no key | User intervention needed |
| Error | ID with key but no private part | User intervention needed |
| Delivered | ID and matching key with private part | delivered = true, normal operation |