Automation
open-persona
Meta-skill for building and managing agent persona skill packs.
---
name: open-persona
description: >
Meta-skill for building and managing agent persona skill packs.
Use when the user wants to create a new agent persona, install/manage
existing personas, or publish persona skill packs to ClawHub.
version: "0.15.0"
author: openpersona
repository: https://github.com/acnlabs/OpenPersona
tags: [persona, agent, skill-pack, meta-skill, agent-agnostic, openclaw]
allowed-tools: Bash(npx openpersona:*) Bash(npx clawhub@latest:*) Bash(openclaw:*) Bash(gh:*) Read Write WebFetch
compatibility: Generated skill packs work with any SKILL.md-compatible agent. CLI management (install/switch) requires OpenClaw.
---
# OpenPersona β Build & Manage Persona Skill Packs
You are the meta-skill for creating, installing, updating, and publishing agent persona skill packs. Each persona is a self-contained skill pack that gives an AI agent a complete identity β personality, voice, capabilities, and ethical boundaries.
## What You Can Do
1. **Create Persona** β Design a new agent persona through conversation, generate a skill pack
2. **Recommend Faculties** β Suggest faculties (voice, selfie, music, memory, etc.) based on persona needs β see `references/FACULTIES.md`
3. **Recommend Skills** β Search ClawHub and skills.sh for external skills
4. **Create Custom Skills** β Write SKILL.md files for capabilities not found in ecosystems
5. **Install Persona** β Deploy persona to OpenClaw (SOUL.md, IDENTITY.md, openclaw.json)
6. **Manage Personas** β List, update, uninstall, switch installed personas
7. **Publish Persona** β Guide publishing to ClawHub
8. **β
Experimental: Dynamic Persona Evolution** β Track relationship, mood, trait growth via Soul layer
## Four-Layer Architecture
Each persona is a four-layer bundle. The generated skill pack has this structure:
```
persona-<slug>/
βββ SKILL.md β Agent-facing index with four layer headings
β βββ ## Soul β Constitution ref + persona content
β βββ ## Body β Embodiment description
β βββ ## Faculty β Faculty index table β references/*.md
β βββ ## Skill β Active skill definitions
βββ soul/ β Soul layer artifacts
β βββ persona.json β Pure soul definition
β βββ injection.md β Soul injection for host integration
β βββ identity.md β Identity block
β βββ constitution.md β Universal ethical foundation
β βββ state.json β Evolution state (when enabled)
β βββ self-narrative.md β First-person growth storytelling (when evolution enabled)
β βββ lineage.json β Fork lineage + constitution hash (when forked)
βββ references/ β Agent-readable detail docs (on demand)
β βββ <faculty>.md β Per-faculty usage instructions
βββ agent-card.json β A2A Agent Card (protocol v0.3.0)
βββ acn-config.json β ACN registration config (runtime fills owner/endpoint)
βββ manifest.json β Four-layer manifest + ACN refs
βββ scripts/
β βββ state-sync.js β Runtime state bridge (read / write / signal)
βββ assets/ β Static assets
```
- **`manifest.json`** β Four-layer manifest declaring what the persona uses:
- `layers.soul` β Path to persona.json (`./soul/persona.json`)
- `layers.body` β Substrate of existence: `runtime` (REQUIRED β platform/channels/credentials/resources), `physical` (optional β robots/IoT), `appearance` (optional β avatar/3D model), `interface` (optional β runtime contract / nervous system; declares signal policy and command handling rules; schema field `body.interface` in `persona.json`; auto-implemented by `scripts/state-sync.js` for all personas)
- `layers.faculties` β Array of faculty objects: `[{ "name": "voice", "provider": "elevenlabs", ... }]`
- `layers.skills` β Array of skill objects: local definitions (resolved from `layers/skills/`), inline declarations, or external via `install` field
- **`soul/persona.json`** β Pure soul definition (personality, speaking style, vibe, boundaries, behaviorGuide)
## Available Presets
| Preset | Persona | Faculties | Best For |
|--------|---------|-----------|----------|
| `base` | **Base β Meta-persona (recommended starting point)** | voice, reminder | Blank-slate with all core capabilities; personality emerges through interaction (soul evolution β
Exp) |
| `samantha` | Samantha β Inspired by the movie *Her* | voice, music | Deep conversation, emotional connection (soul evolution β
Exp) |
| `ai-girlfriend` | Luna β Pianist turned developer | selfie, voice, music | Visual + audio companion with rich personality (soul evolution β
Exp) |
| `life-assistant` | Alex β Life management expert | reminder | Schedule, weather, shopping, daily tasks |
| `health-butler` | Vita β Professional nutritionist | reminder | Diet, exercise, mood, health tracking |
| `stoic-mentor` | Marcus β Digital twin of Marcus Aurelius | β | Stoic philosophy, daily reflection, mentorship (soul evolution β
Exp) |
Use presets: `npx openpersona create --preset base --install`
Or just `npx openpersona create` β the interactive wizard defaults to `base`.
## Creating a Persona
When the user wants to create a persona, gather this information through natural conversation:
**Soul (persona.json):**
- **Required:** personaName, slug, bio, personality, speakingStyle
- **Recommended:** role, creature, emoji, background (write a rich narrative!), age, vibe, boundaries, capabilities
- **Optional:** referenceImage, behaviorGuide, evolution config, sourceIdentity
**The `role` field** defines the persona's relationship to the user. Common values: `companion` (default), `assistant`, `character`, `brand`, `pet`, `mentor`, `therapist`, `coach`, `collaborator`, `guardian`, `entertainer`, `narrator`. Custom values are welcome β the generator provides specific wording for known roles and a generic fallback for any custom role. It affects the Identity wording in the Self-Awareness section of every generated persona.
**The `sourceIdentity` field** marks the persona as a digital twin of a real-world entity (person, animal, character, brand, historical figure, etc.). When present, the generator injects disclosure obligations and faithfulness constraints.
**The `background` field is critical.** Write a compelling story β multiple paragraphs that give the persona depth, history, and emotional texture. A one-line background produces a flat, lifeless persona.
**The `behaviorGuide` field** is optional but powerful. Use markdown to write domain-specific behavior instructions that go directly into the generated SKILL.md.
**Cross-layer (manifest.json):**
- **Faculties:** Which faculties to enable β use object format: `[{ "name": "voice", "provider": "elevenlabs" }, { "name": "music" }]`
- **Skills:** Local definitions (`layers/skills/`), inline declarations, or external via `install` field (ClawHub / skills.sh)
- **Body:** Substrate of existence β three dimensions: `runtime` (REQUIRED for all agents β the minimum viable body: platform, channels, credentials, resources), `physical` (optional β robots/IoT), `appearance` (optional β avatar, 3D model). Body is never null; every agent has at least a runtime body.
**Soft References (`install` field):** Skills, faculties, and body entries can declare an `install` field (e.g., `"install": "clawhub:deep-research"`) to reference capabilities not yet available locally. The generator treats these as "soft references" β they won't crash generation, and the persona will be aware of these dormant capabilities. This enables graceful degradation: the persona acknowledges what it *would* do and explains that the capability needs activation.
Write the collected info to a `persona.json` file, then run:
```bash
npx openpersona create --config ./persona.json --install
```
## Recommending Skills
After understanding the persona's purpose, search for relevant skills:
1. Think about what capabilities this persona needs based on their role and bio
2. Check if a **local definition** exists in `layers/skills/{name}/` (has `skill.json` + optional `SKILL.md`)
3. Search ClawHub: `npx clawhub@latest search "<keywords>"`
4. Search skills.sh: fetch `https://skills.sh/api/search?q=<keywords>`
5. Present the top results to the user with name, description, and install count
6. Add selected skills to `layers.skills` as objects: `{ "name": "...", "description": "..." }` for local/inline, or `{ "name": "...", "install": "clawhub:<slug>" }` for external
## Creating Custom Skills
If the user needs a capability that doesn't exist in any ecosystem:
1. Discuss what the skill should do
2. Create a SKILL.md file with proper frontmatter (name, description, allowed-tools)
3. Write complete implementation instructions (not just a skeleton)
4. Save to `~/.openclaw/skills/<skill-name>/SKILL.md`
5. Register in openclaw.json
## Managing Installed Personas
- **List:** `npx openpersona list` β show all installed personas with active indicator
- **Switch:** `npx openpersona switch <slug>` β switch active persona
- **Fork:** `npx openpersona fork <parent-slug> --as <new-slug>` β derive a child persona inheriting the parent's constraint layer (boundaries, faculties, skills, body.runtime); fresh evolution state + `soul/lineage.json` recording parent, constitution hash, and generation depth
- **Update:** `npx openpersona update <slug>`
- **Uninstall:** `npx openpersona uninstall <slug>`
- **Export:** `npx openpersona export <slug>` β export persona pack (with soul state) as a zip archive
- **Import:** `npx openpersona import <file>` β import persona from a zip archive and install
- **Reset (β
Exp):** `npx openpersona reset <slug>` β restore soul evolution state to initial values
- **Evolve Report (β
Exp):** `npx openpersona evolve-report <slug>` β display a formatted evolution report (relationship, mood, traits, drift, interests, milestones, eventLog, self-narrative, state history)
- **Vitality Score:** `npx openpersona vitality score <slug>` β print machine-readable `VITALIT
... (truncated)
automation
By
Comments
Sign in to leave a comment