@tellandshow/personalities-core
v0.0.2
Published
AI personality library — 10 personas the kid can swap mid-session. Each persona contributes a name, portrait emoji, voice traits, a kid-readable bio, and a system-prompt fragment appended to the base AI partner contract. Pure data + a React picker.
Maintainers
Readme
@tellandshow/personalities-core
10 AI partner personas the kid can swap mid-session. Each persona is a name + portrait emoji + voice traits + a kid-readable bio + a system-prompt fragment that's appended to (never replaces) the base AI partner contract.
The cast
| id | level | category | vibe | | ------ | ----- | ---------- | --------------------------------------- | | inkie | 1 | companion | Default — curious, gentle, warm | | pip | 3 | companion | Eager squirrel cheerleader | | sage | 3 | wise | Patient turtle; answers with questions | | spark | 3 | whimsy | Punny firefly | | pixel | 3 | expert | Precise, technical robot | | rosie | 4 | companion | Warm bear, notices kid's mood | | quill | 4 | expert | Storytelling fox; vivid prose | | maple | 4 | wise | Calm tree-spirit; nature metaphors | | bolt | 5 | whimsy | Hyperactive hummingbird | | echo | 5 | wise | Quiet bat; mirrors ideas back |
The unlock levels match @tellandshow/profile-core — call profile.isUnlocked('personality-swap') (level 3) before showing the picker at all, then filter by getAvailablePersonas(profile.getLevel()).
Usage
import { PERSONAS, getPersonaById, getAvailablePersonas } from '@tellandshow/personalities-core';
import { PersonaPicker } from '@tellandshow/personalities-core/client';
const available = getAvailablePersonas(profile.getLevel());
<PersonaPicker
personas={available}
value={selectedId}
onChange={(p) => persistSelection(p.id)}
/>Then thread getPersonaById(selectedId).systemPromptFragment into the AI partner's system prompt construction.
License
MIT.
