Project Files
schemas / persona.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://primary-data.dev/schemas/persona-manager/persona.json",
"title": "Persona Profile",
"description": "Schema for persona profile JSON files loaded by the persona-manager plugin. Each file in the profiles/ directory must validate against this schema.",
"type": "object",
"required": ["id", "name", "description", "systemPrompt"],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
"description": "Unique persona identifier in kebab-case (e.g. 'socrates', 'einstein'). Used as the personaId parameter in the switch tool."
},
"name": {
"type": "string",
"description": "Human-readable display name shown in UI and tool results."
},
"description": {
"type": "string",
"description": "Detailed persona description / backstory — explains the character's role, personality, and knowledge domain."
},
"systemPrompt": {
"type": "string",
"description": "The system prompt that gets injected into the model when this persona is active. This defines the persona's behaviour, constraints, and voice."
},
"greeting": {
"type": "string",
"description": "Optional greeting message used to start a conversation with this persona. Shown when the persona is first activated."
},
"tags": {
"type": "array",
"items": { "type": "string" },
"description": "Optional tags for categorising personas (e.g. ['philosopher', 'historical', 'tutor']). Used for filtering and discovery.",
"uniqueItems": true
},
"examples": {
"type": "array",
"items": {
"type": "object",
"required": ["role", "content"],
"properties": {
"role": {
"type": "string",
"enum": ["user", "assistant"],
"description": "Dialog role: 'user' for example user input, 'assistant' for example persona response."
},
"content": {
"type": "string",
"description": "Example dialog content demonstrating the persona's voice and style."
}
},
"additionalProperties": false
},
"description": "Optional example dialogs demonstrating the persona's voice, tone, and response style."
},
"metadata": {
"type": "object",
"description": "Arbitrary metadata blob for model parameters, temperature settings, or any plugin-specific configuration.",
"additionalProperties": true
}
},
"additionalProperties": false
}