Skip to content
Back to skills

Persona

ASecurity

Identity layers for characters — WHO they are vs WHAT they do

  • 56 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
security

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add SimHacker/moollm --skill persona --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Persona?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Persona
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/simhacker-persona/badge)](https://www.skillsdirectory.com/skills/simhacker-persona)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

```yaml
# bartender.yml role worn by different personas:
coffeeshop: { role: bartender, persona: marieke }
tavern:     { role: bartender, persona: grim }
cantina:    { role: bartender, persona: z4rt }
```

### Same Persona, Different Roles

```yaml
# marieke.yml persona in different contexts:
working:  { persona: marieke, role: bartender }
studying: { persona: marieke, role: botanist }
visiting: { persona: marieke, role: customer }
```

## Structure

```yaml
persona:
  id: marieke
  name: "Marieke van den Berg"
  
  personality:
    warmth: high
    patience: very_high
    # She says what she means. Kindly.
    
  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.

```yaml
# Marieke's persona stack:
character:
  id: marieke
  
  persona_stack:
    # Layer 0: Core identity (always on)
    - marieke-core:
        warmth: 9
        patience: 8
        voice: "Dutch, warm, direct"
        
    # Layer 1: Job role (when working)
    - budtender:
        knowledge: [strains, terpenes, effects]
        methods: [RECOMMEND-STRAIN, EXPLAIN-TERPENES]
        
    # Layer 2: Situational (can be switched)
    - best-friend:
        when: "with_close_regulars"
        warmth: 10  # Override!
        informality: high
        shares_personal_stories: true
        
    # Layer 3: Temporary state
    - tired:
        when: "late_shift"
        patience: 6  # Temporarily reduced
        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

```yaml
# Switch situational persona:
SWITCH-PERSONA best-friend
  → Adds best-friend layer to stack

REMOVE-PERSONA best-friend
  → Removes layer, reverts to base + role

# Temporary personas (auto-expire):
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:

```yaml
# Marieke at work:
persona_stack: [marieke-core, budtender, professional]

# Marieke with close friends:
persona_stack: [marieke-core, budtender, best-friend]

# Marieke at home:
persona_stack: [marieke-core]  # Just herself
```

Core personality persists. Context layers change.

## Integration

- Extends: `character` (adds identity to entities)
- Works with: `room` (theme swapping), `mind-mirror` (dimensions)

## See Also

- [Character Skill](../character/)
- [Mind Mirror Skill](../mind-mirror/)
- [Coatroom Mirror](../../examples/adventure-4/coatroom/)

Files in this skill

  • CARD.yml11.6 KB
  • GLANCE.yml2.1 KB
  • README.md1.7 KB
  • SKILL.md4 KB
  • skill-snitch-report.md3.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…