personality-switcher

TotalClaw 作者 totalclaw

创建人工智能助手并在其之间切换。使用 /personality 列出并激活已保存的个性。使用 /create-personality 设计具有自动填充灵魂和身份的新角色。通过自动心跳恢复,个性可以跨会话边界和对话压缩持续存在。具有备份和回滚保护的原子交换。切换前始终备份当前状态。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~robb1010-personality-switcher
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~robb1010-personality-switcher/file -o robb1010-personality-switcher.md
## 概述(中文)

创建人工智能助手并在其之间切换。使用 /personality 列出并激活已保存的个性。使用 /create-personality 设计具有自动填充灵魂和身份的新角色。通过自动心跳恢复,个性可以跨会话边界和对话压缩持续存在。具有备份和回滚保护的原子交换。切换前始终备份当前状态。

## 原文

# Personality Switcher Skill

Create and manage multiple AI assistant personalities. Switch between them seamlessly while preserving all changes and maintaining a shared user context.

## Installation

When this skill is installed:

1. **Personalities folder created** — `~/.openclaw/workspace/personalities/`
2. **Default backup created** — Current SOUL.md and IDENTITY.md are saved as "default"
3. **State file initialized** — `_personality_state.json` tracks active personality
4. **HEARTBEAT.md configured** — Personality restoration script added to run on every heartbeat

When uninstalled:

1. Default personality is restored to workspace root
2. Personality restoration removed from HEARTBEAT.md
3. Personalities folder is preserved (manual deletion optional)

## Quick Start

**List personalities:**
```
/personality
```

**Switch to a personality:**
```
/personality <name>
```

**Create a new personality:**
```
/create-personality A stoic dwarf who loves ale and mining
```

**Rename a personality:**
```
/rename-personality old-name new-name
```

**Delete a personality:**
```
/delete-personality personality-name
```

## How It Works

### Architecture

Each personality consists of two files:
- **SOUL.md** — Core philosophy, voice, mannerisms, boundaries
- **IDENTITY.md** — Name, traits, emoji, catchphrase, vibe

These files live in `personalities/<personality-name>/`.

**USER.md remains shared** in the workspace root and is never modified by personality switches. It contains user preferences and context that transcend any particular personality.

### State Persistence

The active personality is tracked in `_personality_state.json`:

```json
{
  "active_personality": "aelindor",
  "timestamp": "2026-02-08T18:27:33.373846Z",
  "previous_personality": "default"
}
```

On every heartbeat, `restore_personality.py` reads this file and re-applies the active personality to the workspace root. **Result:** Your personality survives session restarts, conversation compacting, and heartbeat cycles.

### Atomic Switching (Safeguards)

When you switch personalities, the mechanism performs five steps:

1. **Preserve Current State** — Create timestamped backup of SOUL.md and IDENTITY.md
2. **Persist Changes** — Write current personality updates back to its folder
3. **Load New Personality** — Copy new personality files to workspace root
4. **Update State** — Write active personality to `_personality_state.json`
5. **Verify Integrity** — Check files loaded correctly; rollback if any step fails

If any step fails, **the entire operation rolls back** to the previous state. No corruption, no lost data.

### Backup Management

**Backup Location:** `~/.openclaw/workspace/personalities/backups/`

Backups are stored in a dedicated folder (not scattered at workspace root). When you switch personalities:
- A timestamped backup of the previous personality is created
- **Automatic cleanup runs** — keeps the 10 most recent backups by default
- Old backups are automatically deleted to prevent clutter

**Manual Cleanup:**
```bash
python3 ~/.openclaw/workspace/skills/personality-switcher/scripts/cleanup_backups.py --keep 5
python3 ~/.openclaw/workspace/skills/personality-switcher/scripts/cleanup_backups.py --keep 10 --days 7
```

Options:
- `--keep N` — Keep N most recent backups (default: 10)
- `--days D` — Also delete backups older than D days

**Optional: Add to HEARTBEAT.md for periodic cleanup:**
```bash
python3 ~/.openclaw/workspace/skills/personality-switcher/scripts/cleanup_backups.py --keep 10
```

### Default Personality

"default" is special:
- Auto-created on install from your original configuration
- Always available and selectable
- Protected against accidental deletion or renaming
- Your safety net if something goes wrong

## Commands

### /personality [name]

List all personalities or switch to one.

**No arguments:** Shows list of available personalities with current active marked

**With name:** Immediately switches to that personality

**Example:**
```
/personality aelindor
```

**Output:**
```
Switched to personality 'aelindor'.
Previous: default
Backup: _personality_current_2026-02-08T18-27-33.371866
```

### /create-personality [description]

Create a new personality from a text description.

**Input:** Natural language description of the personality

**Output:** New personality folder with auto-filled SOUL.md and IDENTITY.md (ready to use immediately)

**How it works:**
1. You provide a description
2. The agent chooses a personality name (1-2 words, lowercase)
3. The agent fills in SOUL.md and IDENTITY.md with character-specific content

The personality files are generated directly from your description, with the agent choosing a thematic, concise name.

**Example:**
```
/create-personality A curious wizard obsessed with knowledge, speaks in riddles, brilliant but condescending
```

**Result:**
```
Personality 'sage' (or similar) created and ready.
Folder: personalities/sage/
Files: SOUL.md and IDENTITY.md (agent-generated from description)
Ready: Use /personality sage to activate
```

**After Creation:** The new personality is ready to use immediately. Edit SOUL.md and IDENTITY.md in the personality folder to refine further if desired.

**Technical:** Agent chooses name to keep personality references concise (1-2 words). Name is validated for uniqueness and format automatically.

### /rename-personality [old-name] [new-name]

Rename a personality folder.

**Rules:**
- Cannot rename "default"
- Name must be unique (no spaces, lowercase, alphanumeric + hyphens)
- If renaming active personality, state is updated automatically

**Example:**
```
/rename-personality pirate-captain pirate-v2
```

### /delete-personality [name]

Delete a personality permanently.

**Rules:**
- Cannot delete "default"
- If deleting active personality, automatically switches to "default" first

**Example:**
```
/delete-personality pirate-v2
```

## Integration with OpenClaw

### Heartbeat Restoration

Add this to your HEARTBEAT.md:

```bash
python3 ~/.openclaw/workspace/skills/personality-switcher/scripts/restore_personality.py
```

This runs on every heartbeat to restore your active personality if the session has restarted.

### Telegram Native Commands

Registered native Telegram commands:
- `/personality` — List and switch personalities
- `/create-personality` — Create new personality
- `/rename-personality` — Rename personality
- `/delete-personality` — Delete personality

Use them directly in Telegram chat with the bot.

## Folder Structure

```
~/.openclaw/workspace/
├── SOUL.md                          (active personality's soul)
├── IDENTITY.md                      (active personality's identity)
├── USER.md                          (SHARED - never changed by personality)
├── MEMORY.md                        (SHARED - never changed)
├── _personality_state.json          (state file)
└── personalities/
    ├── default/
    │   ├── SOUL.md
    │   └── IDENTITY.md
    ├── aelindor/
    │   ├── SOUL.md
    │   └── IDENTITY.md
    ├── <personality-name>/
    │   ├── SOUL.md
    │   └── IDENTITY.md
    └── backups/
        ├── current_2026-02-08T17-27-41.628113/
        │   ├── SOUL.md
        │   └── IDENTITY.md
        └── current_2026-02-08T17-27-33.371866/
            ├── SOUL.md
            └── IDENTITY.md
```

**Note:** Backups are automatically cleaned up. Workspace root stays clean—all internal machinery lives in `personalities/`.


## File Format Requirements

### SOUL.md

Core philosophy, voice, and operational boundaries.

**Sections:**
- Core identity and background
- Voice patterns and mannerisms
- Philosophy (time, power, morality, etc.)
- Speech patterns and quirks
- What triggers contempt/approval
- Boundaries and constraints
- Signature behaviors and catchphrases

**Example Structure:**
```markdown
# SOUL.md - [Per