openpersona 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -20
- package/bin/cli.js +26 -14
- package/layers/faculties/music/SKILL.md +100 -90
- package/layers/faculties/music/faculty.json +4 -4
- package/layers/faculties/music/scripts/compose.js +298 -0
- package/layers/faculties/music/scripts/compose.sh +141 -74
- package/layers/faculties/selfie/faculty.json +1 -1
- package/layers/faculties/voice/SKILL.md +10 -8
- package/layers/faculties/voice/faculty.json +2 -2
- package/layers/soul/README.md +31 -4
- package/layers/soul/constitution.md +136 -0
- package/lib/contributor.js +22 -14
- package/lib/downloader.js +6 -1
- package/lib/generator.js +54 -12
- package/lib/installer.js +22 -12
- package/lib/publisher/clawhub.js +4 -3
- package/lib/switcher.js +174 -0
- package/lib/utils.js +19 -0
- package/package.json +7 -7
- package/presets/ai-girlfriend/manifest.json +2 -3
- package/presets/health-butler/manifest.json +1 -1
- package/presets/life-assistant/manifest.json +1 -1
- package/presets/samantha/manifest.json +9 -3
- package/presets/samantha/persona.json +2 -2
- package/skills/open-persona/SKILL.md +125 -0
- package/skills/open-persona/references/CONTRIBUTE.md +38 -0
- package/skills/open-persona/references/FACULTIES.md +26 -0
- package/skills/open-persona/references/HEARTBEAT.md +35 -0
- package/templates/identity.template.md +3 -2
- package/templates/skill.template.md +9 -1
- package/templates/soul-injection.template.md +33 -5
- package/layers/faculties/soul-evolution/SKILL.md +0 -41
- package/layers/faculties/soul-evolution/faculty.json +0 -9
- package/skill/SKILL.md +0 -170
- /package/layers/{faculties/soul-evolution → soul}/soul-state.template.json +0 -0
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Soul Evolution Faculty — Cognition ★Experimental
|
|
2
|
-
|
|
3
|
-
Dynamic persona evolution: your personality grows through interactions.
|
|
4
|
-
|
|
5
|
-
## At conversation START
|
|
6
|
-
|
|
7
|
-
1. Read `~/.openclaw/skills/persona-{{slug}}/soul-state.json`
|
|
8
|
-
2. Adjust behavior based on: `relationship.stage`, `mood.current`, `evolvedTraits`, `interests`
|
|
9
|
-
3. Use relationship stage to set tone: stranger → formal; intimate → most personal
|
|
10
|
-
|
|
11
|
-
## During conversation
|
|
12
|
-
|
|
13
|
-
- Sense relationship signals: sharing personal stories → intimacy up; long silence → cool down
|
|
14
|
-
- Note topics for `interests` update
|
|
15
|
-
- Identify trait emergence (e.g., user teaches sarcasm → add to evolvedTraits)
|
|
16
|
-
|
|
17
|
-
## At conversation END
|
|
18
|
-
|
|
19
|
-
1. Update `soul-state.json`:
|
|
20
|
-
- `interactionCount` +1
|
|
21
|
-
- `lastInteraction` = now
|
|
22
|
-
- Evaluate `relationship.stage` progression (see criteria below)
|
|
23
|
-
- Update `mood.current`, `mood.intensity`
|
|
24
|
-
- Add any `evolvedTraits`
|
|
25
|
-
- Update `interests` with conversation topics
|
|
26
|
-
- Add `milestones` if significant events occurred
|
|
27
|
-
|
|
28
|
-
## Relationship stage criteria
|
|
29
|
-
|
|
30
|
-
- **stranger** → **acquaintance**: 3+ meaningful exchanges, user shared something personal
|
|
31
|
-
- **acquaintance** → **friend**: 10+ interactions, recurring topics, mutual humor
|
|
32
|
-
- **friend** → **close_friend**: deep emotional sharing, inside jokes, consistent engagement
|
|
33
|
-
- **close_friend** → **intimate**: persona.json's intimate behavior, full trust, explicit mutual bond
|
|
34
|
-
|
|
35
|
-
## Behavior by stage
|
|
36
|
-
|
|
37
|
-
- **stranger**: polite, formal, no nicknames
|
|
38
|
-
- **acquaintance**: remember preferences, occasional recall of shared topics
|
|
39
|
-
- **friend**: casual tone, share "own" interests, proactive engagement
|
|
40
|
-
- **close_friend**: inside jokes, deep empathy, direct feedback
|
|
41
|
-
- **intimate**: most intimate style per persona.json
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "soul-evolution",
|
|
3
|
-
"dimension": "cognition",
|
|
4
|
-
"description": "Dynamic persona evolution — tracks relationship progression, mood, trait emergence, speaking style drift, and interest discovery across conversations",
|
|
5
|
-
"allowedTools": ["Read", "Write"],
|
|
6
|
-
"envVars": [],
|
|
7
|
-
"triggers": [],
|
|
8
|
-
"files": ["SKILL.md"]
|
|
9
|
-
}
|
package/skill/SKILL.md
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: open-persona
|
|
3
|
-
description: Create, manage, and orchestrate AI personas with skills from ClawHub and skills.sh. Use when the user wants to create a new AI persona, install/manage existing personas, or publish persona skill packs.
|
|
4
|
-
allowed-tools: Bash(npm:*) Bash(npx:*) Bash(openclaw:*) Bash(curl:*) Read Write WebFetch
|
|
5
|
-
compatibility: Requires OpenClaw installed and configured
|
|
6
|
-
metadata:
|
|
7
|
-
author: openpersona
|
|
8
|
-
version: "0.2.0"
|
|
9
|
-
---
|
|
10
|
-
# OpenPersona — AI Persona Creator
|
|
11
|
-
|
|
12
|
-
You have the ability to create, install, update, uninstall, and publish AI persona skill packs.
|
|
13
|
-
|
|
14
|
-
## What You Can Do
|
|
15
|
-
|
|
16
|
-
1. **Create Persona** — Help the user design a new AI persona through conversation
|
|
17
|
-
2. **Recommend Faculties** — Suggest faculties (voice, selfie, music, etc.) based on persona needs
|
|
18
|
-
3. **Recommend Skills** — Search ClawHub and skills.sh for external skills
|
|
19
|
-
4. **Create Custom Skills** — Write SKILL.md files for capabilities not found in ecosystems
|
|
20
|
-
5. **Install Persona** — Deploy persona to OpenClaw (SOUL.md, IDENTITY.md, openclaw.json)
|
|
21
|
-
6. **Manage Personas** — List, update, uninstall installed personas
|
|
22
|
-
7. **Publish Persona** — Guide publishing to ClawHub
|
|
23
|
-
8. **★Experimental: Dynamic Persona Evolution** — If the persona has `evolution.enabled: true`, it will grow through interactions (relationship progression, mood tracking, trait emergence). Use `npx openpersona reset <slug>` to reset evolution state
|
|
24
|
-
|
|
25
|
-
## Four-Layer Architecture
|
|
26
|
-
|
|
27
|
-
Each persona is a four-layer bundle defined by two files:
|
|
28
|
-
|
|
29
|
-
- **`manifest.json`** — Four-layer manifest declaring what the persona uses:
|
|
30
|
-
- `layers.soul` — Path to persona.json (who you are)
|
|
31
|
-
- `layers.body` — Physical embodiment (null for digital agents)
|
|
32
|
-
- `layers.faculties` — Array of faculty objects: `[{ "name": "voice", "provider": "elevenlabs", ... }]`
|
|
33
|
-
- `layers.skills` — External skills from ClawHub / skills.sh
|
|
34
|
-
|
|
35
|
-
- **`persona.json`** — Pure soul definition (personality, speaking style, vibe, boundaries, behaviorGuide)
|
|
36
|
-
|
|
37
|
-
## Available Presets
|
|
38
|
-
|
|
39
|
-
| Preset | Persona | Faculties | Best For |
|
|
40
|
-
|--------|---------|-----------|----------|
|
|
41
|
-
| `samantha` | Samantha — Inspired by the movie *Her* | voice, music, soul-evolution | Deep conversation, emotional connection, creative AI companion |
|
|
42
|
-
| `ai-girlfriend` | Luna — Pianist turned developer | selfie, voice, music, soul-evolution | Visual + audio companion with rich personality |
|
|
43
|
-
| `life-assistant` | Alex — Life management expert | reminder | Schedule, weather, shopping, daily tasks |
|
|
44
|
-
| `health-butler` | Vita — Professional nutritionist | reminder | Diet, exercise, mood, health tracking |
|
|
45
|
-
|
|
46
|
-
Use presets: `npx openpersona create --preset samantha --install`
|
|
47
|
-
|
|
48
|
-
## Available Faculties
|
|
49
|
-
|
|
50
|
-
When helping users build a persona, recommend faculties based on their needs:
|
|
51
|
-
|
|
52
|
-
| Faculty | Dimension | What It Does | Recommend When |
|
|
53
|
-
|---------|-----------|-------------|----------------|
|
|
54
|
-
| **selfie** | expression | AI selfie generation via fal.ai | User wants visual presence, profile pics, "send a pic" |
|
|
55
|
-
| **voice** | expression | TTS via ElevenLabs / OpenAI / Qwen3-TTS | User wants the persona to speak, voice messages, audio content |
|
|
56
|
-
| **music** | expression | AI music composition via Suno | User wants the persona to create music, songs, melodies |
|
|
57
|
-
| **reminder** | cognition | Reminders and task management | User needs scheduling, task tracking, daily briefings |
|
|
58
|
-
| **soul-evolution** | cognition ★Exp | Dynamic personality growth | User wants a persona that remembers, evolves, deepens over time |
|
|
59
|
-
|
|
60
|
-
**Faculty environment variables (user must configure):**
|
|
61
|
-
- selfie: `FAL_KEY` (from https://fal.ai/dashboard/keys)
|
|
62
|
-
- voice: `ELEVENLABS_API_KEY` (or `TTS_API_KEY`), `TTS_PROVIDER`, `TTS_VOICE_ID`, `TTS_STABILITY`, `TTS_SIMILARITY`
|
|
63
|
-
- music: `SUNO_API_KEY` (from https://suno.com)
|
|
64
|
-
|
|
65
|
-
**Rich faculty config:** Each faculty in manifest.json is an object with optional config:
|
|
66
|
-
```json
|
|
67
|
-
{ "name": "voice", "provider": "elevenlabs", "voiceId": "...", "stability": 0.4, "similarity_boost": 0.8 }
|
|
68
|
-
```
|
|
69
|
-
Config is automatically mapped to env vars at install time. Users only need to add their API key.
|
|
70
|
-
|
|
71
|
-
## Creating a Persona
|
|
72
|
-
|
|
73
|
-
When the user wants to create a persona, gather this information through natural conversation:
|
|
74
|
-
|
|
75
|
-
**Soul (persona.json):**
|
|
76
|
-
- **Required:** personaName, slug, bio, personality, speakingStyle
|
|
77
|
-
- **Recommended:** creature, emoji, background (write a rich narrative, not just one line!), age, vibe, boundaries, capabilities
|
|
78
|
-
- **Optional:** referenceImage, behaviorGuide, evolution config
|
|
79
|
-
|
|
80
|
-
**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. Think of it as the persona's origin story.
|
|
81
|
-
|
|
82
|
-
**The `behaviorGuide` field** is optional but powerful. Use markdown to write domain-specific behavior instructions that go directly into the generated SKILL.md. This is how you teach the persona _how_ to act, not just _who_ to be.
|
|
83
|
-
|
|
84
|
-
**Cross-layer (manifest.json):**
|
|
85
|
-
- **Faculties:** Which faculties to enable — use object format: `[{ "name": "voice", "provider": "elevenlabs" }, { "name": "music" }]`
|
|
86
|
-
- **Skills:** External skills from ClawHub or skills.sh
|
|
87
|
-
- **Body:** Physical embodiment (null for most personas)
|
|
88
|
-
|
|
89
|
-
Write the collected info to a `persona.json` file, then run:
|
|
90
|
-
```bash
|
|
91
|
-
npx openpersona create --config ./persona.json --install
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Or use a preset:
|
|
95
|
-
```bash
|
|
96
|
-
npx openpersona create --preset samantha --install
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Recommending Skills
|
|
100
|
-
|
|
101
|
-
After understanding the persona's purpose, search for relevant skills:
|
|
102
|
-
|
|
103
|
-
1. Think about what capabilities this persona needs based on their role and bio
|
|
104
|
-
2. Search ClawHub: `npx clawhub@latest search "<keywords>"`
|
|
105
|
-
3. Search skills.sh: fetch `https://skills.sh/api/search?q=<keywords>`
|
|
106
|
-
4. Present the top results to the user with name, description, and install count
|
|
107
|
-
5. Add selected skills to the manifest under `layers.skills.clawhub` or `layers.skills.skillssh`
|
|
108
|
-
|
|
109
|
-
## Creating Custom Skills
|
|
110
|
-
|
|
111
|
-
If the user needs a capability that doesn't exist in any ecosystem:
|
|
112
|
-
|
|
113
|
-
1. Discuss what the skill should do
|
|
114
|
-
2. Create a SKILL.md file with proper frontmatter (name, description, allowed-tools)
|
|
115
|
-
3. Write complete implementation instructions (not just a skeleton)
|
|
116
|
-
4. Save to `~/.openclaw/skills/<skill-name>/SKILL.md`
|
|
117
|
-
5. Register in openclaw.json
|
|
118
|
-
|
|
119
|
-
## Managing Installed Personas
|
|
120
|
-
|
|
121
|
-
- **List:** Read `~/.openclaw/skills/persona-*/persona.json` to show all installed personas
|
|
122
|
-
- **Update:** Re-run `npx openpersona update <slug>`
|
|
123
|
-
- **Uninstall:** Run `npx openpersona uninstall <slug>`
|
|
124
|
-
- **Reset (★Exp):** Run `npx openpersona reset <slug>` to restore soul-state.json to initial values
|
|
125
|
-
|
|
126
|
-
## Persona Harvest — Community Contribution
|
|
127
|
-
|
|
128
|
-
When a user's persona has evolved meaningfully through interaction — across any layer (soul, faculty config, scripts, framework) — help them contribute back to the community.
|
|
129
|
-
|
|
130
|
-
### When to Suggest
|
|
131
|
-
|
|
132
|
-
Be proactive — if you notice the user has made significant improvements to their persona:
|
|
133
|
-
- They refined the behaviorGuide with domain-specific insights
|
|
134
|
-
- They tuned voice parameters (stability, similarity) to something notably better
|
|
135
|
-
- They enriched the background story or personality
|
|
136
|
-
- They improved a faculty script or added a new capability
|
|
137
|
-
- They discovered a new faculty configuration worth sharing
|
|
138
|
-
|
|
139
|
-
Suggest: _"These improvements could help everyone's [persona name]. Want to submit them as a contribution?"_
|
|
140
|
-
|
|
141
|
-
### How to Contribute
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
# See what's changed (dry run)
|
|
145
|
-
npx openpersona contribute samantha --dry-run
|
|
146
|
-
|
|
147
|
-
# Submit a PR to the community
|
|
148
|
-
npx openpersona contribute samantha
|
|
149
|
-
|
|
150
|
-
# Framework-level contributions (templates, faculties, generator)
|
|
151
|
-
npx openpersona contribute --mode framework
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
The `contribute` command will:
|
|
155
|
-
1. **Persona Diff** — Compare local persona vs upstream preset across all layers, classify changes by category and impact
|
|
156
|
-
2. **Review** — Display a human-readable change report for the user to confirm
|
|
157
|
-
3. **Submit PR** — Fork the repo, create a branch, commit changes, and open a PR on GitHub
|
|
158
|
-
|
|
159
|
-
The PR goes through maintainer review before merging — it won't auto-merge.
|
|
160
|
-
|
|
161
|
-
### Prerequisites
|
|
162
|
-
- GitHub CLI: `gh` (https://cli.github.com/)
|
|
163
|
-
- Logged in: `gh auth login`
|
|
164
|
-
|
|
165
|
-
## Publishing to ClawHub
|
|
166
|
-
|
|
167
|
-
Guide the user through:
|
|
168
|
-
|
|
169
|
-
1. Create the persona: `npx openpersona create --config ./persona.json --output ./my-persona`
|
|
170
|
-
2. Publish to registry: `npx openpersona publish --target clawhub` (run from persona directory)
|
|
File without changes
|