Create and manage multiple AI assistant personalities. Switch between them seamlessly while preserving all changes and maintaining a shared user context.
When this skill is installed:
~/.openclaw/workspace/personalities/_personality_state.json tracks active personalityWhen uninstalled:
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
Each personality consists of two files:
These files live in personalities/.
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.
The active personality is tracked in _personality_state.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.
When you switch personalities, the mechanism performs five steps:
_personality_state.jsonIf any step fails, the entire operation rolls back to the previous state. No corruption, no lost data.
Backup Location: ~/.openclaw/workspace/personalities/backups/
Backups are stored in a dedicated folder (not scattered at workspace root). When you switch personalities:
Manual Cleanup:
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 daysOptional: Add to HEARTBEAT.md for periodic cleanup:
python3 ~/.openclaw/workspace/skills/personality-switcher/scripts/cleanup_backups.py --keep 10
"default" is special:
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 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:
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 a personality folder.
Rules:
Example:
/rename-personality pirate-captain pirate-v2
Delete a personality permanently.
Rules:
Example:
/delete-personality pirate-v2
Add this to your HEARTBEAT.md:
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.
Registered native Telegram commands:
/personality — List and switch personalities/create-personality — Create new personality/rename-personality — Rename personality/delete-personality — Delete personalityUse them directly in Telegram chat with the bot.
~/.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/.
Core philosophy, voice, and operational boundaries.
Sections:
Example Structure:
# SOUL.md - [Personality Name]
## Core Identity
[Background and essence]
## Voice & Mannerisms
[How this personality speaks and acts]
## Philosophy
[Core beliefs and worldview]
## Signature Behaviors
[Unique traits and catchphrases]
Quick reference card for the personality.
Sections:
Example Structure:
# IDENTITY.md - [Personality Name]
- **Name:** [Name]
- **Type:** [Creature or archetype]
- **Emoji:** [Emoji]
- **Vibe:** [One-sentence vibe]
- **Catchphrase:** [Signature phrase]
## Quick Traits
- Trait 1
- Trait 2
- Trait 3
Timestamped backups are created before every switch in personalities/backups/:
current_2026-02-08T17-27-33.371866/Manual recovery (if needed):
# List available backups
ls -la ~/.openclaw/workspace/personalities/backups/
# Copy backup files back to workspace root if needed
cp ~/.openclaw/workspace/personalities/backups/current_<timestamp>/SOUL.md ~/.openclaw/workspace/SOUL.md
cp ~/.openclaw/workspace/personalities/backups/current_<timestamp>/IDENTITY.md ~/.openclaw/workspace/IDENTITY.md
Backups are automatically cleaned up; by default, the 10 most recent are kept. Adjust cleanup frequency or retention in HEARTBEAT.md as needed.
All commands return JSON responses:
Success:
{
"status": "success",
"message": "Operation completed.",
"personality": "aelindor"
}
Error:
{
"status": "error",
"message": "Human-readable error message.",
"code": "error_code",
"detail": "Technical detail if applicable"
}
Common Error Codes:
personality_not_found — Target personality doesn't existalready_exists — Name already in useinvalid_name — Name format invalidcannot_delete_default — Attempted to delete "default"cannot_rename_default — Attempted to rename "default"switch_failed — Switch failed; rolled back to previousintegrity_check_failed — File integrity check failedWhen the skill is uninstalled:
personalities/ folder is preserved (not deleted)Nothing is lost. Your personalities are safe.
Location: skills/personality-switcher/scripts/
list_personalities.py — List available personalitiesswitch_personality.py — Atomic switch with backup/rollback (auto-cleanup included)create_personality.py — Generate personality from descriptionrename_personality.py — Rename personality folderdelete_personality.py — Delete personality (with auto-switch if active)restore_personality.py — Heartbeat restorationcleanup_backups.py — Manual backup cleanup (with --keep and --days options)utils.py — Shared utilities (I/O, backups, validation, state, cleanup)All scripts output JSON for reliable integration.
By default, switch_personality.py automatically cleans up old backups after a successful switch, keeping the 10 most recent. This happens silently unless cleanup fails, in which case a warning is included in the response.
Version: 2.0 (Redesigned from scratch)
Status: Production ready with atomic operations and rollback safeguards
共 1 个版本