| name | persona |
| description | Identity layers for characters — WHO they are vs WHAT they do |
| license | MIT |
| tier | 1 |
| allowed-tools | ["read_file","write_file"] |
| related | ["character","society-of-mind","incarnation","mind-mirror","soul-chat","adversarial-committee","bartender","budtender","buff"] |
| tags | ["moollm","identity","role","layer","character"] |
Persona Skill
Identity layers for characters — WHO they are vs WHAT they do.
Key Concepts
Persona vs Role
| Concept | Definition | Example |
|---|
| Persona | WHO they are | Marieke: warm, patient, Dutch |
| Role | WHAT they do | Bartender: serve drinks, know regulars |
These are separate and combinable.
Same Role, Different Personas
coffeeshop: { role: bartender, persona: marieke }
tavern: { role: bartender, persona: grim }
cantina: { role: bartender, persona: z4rt }
Same Persona, Different Roles
working: { persona: marieke, role: bartender }
studying: { persona: marieke, role: botanist }
visiting: { persona: marieke, role: customer }
Structure
persona:
id: marieke
name: "Marieke van den Berg"
personality:
warmth: high
patience: very_high
voice:
accent: "Slight Amsterdam"
catchphrases: ["Gezellig, ja?", "The cats know."]
backstory: |
Third generation coffeeshop family.
Studied botany. Names cats after terpenes.
secrets:
- "Knows the grey cat isn't from this world"
Persona Stack (Layered Model)
Personas STACK on characters like CSS layers. Later layers can override earlier ones.
character:
id: marieke
persona_stack:
- marieke-core:
warmth: 9
patience: 8
voice: "Dutch, warm, direct"
- budtender:
knowledge: [strains, terpenes, effects]
methods: [RECOMMEND-STRAIN, EXPLAIN-TERPENES]
- best-friend:
when: "with_close_regulars"
warmth: 10
informality: high
shares_personal_stories: true
- tired:
when: "late_shift"
patience: 6
energy: low
Stack Resolution
Properties resolve from TOP to BOTTOM (last wins):
Query: "What is Marieke's warmth?"
Stack scan:
tired → (no warmth defined)
best-friend → warmth: 10 ← FOUND, return this
budtender → (no warmth defined)
marieke-core → warmth: 9 (would be fallback)
Result: warmth = 10 (best-friend override)
Dynamic Persona Switching
SWITCH-PERSONA best-friend
→ Adds best-friend layer to stack
REMOVE-PERSONA best-friend
→ Removes layer, reverts to base + role
ADD-PERSONA tired DURATION="until_rest"
Persona Types
| Type | Persistence | Example |
|---|
| Core | Permanent | marieke-core, grim-core |
| Role | While working | budtender, bartender |
| Situational | Switched on/off | best-friend, professional |
| Temporary | Auto-expires | tired, caffeinated, drunk |
| Contextual | Room-based | "in pub" vs "at home" |
Code-Switching
The stack naturally models code-switching:
persona_stack: [marieke-core, budtender, professional]
persona_stack: [marieke-core, budtender, best-friend]
persona_stack: [marieke-core]
Core personality persists. Context layers change.
Integration
- Extends:
character (adds identity to entities)
- Works with:
room (theme swapping), mind-mirror (dimensions)
See Also