| name | registry-management |
| description | Guide for adding and managing entries in the personality-assistant-registry. Use when adding MCP servers, skills, bundles, templates, or heartbeat tasks to the registry. |
Registry Management
Overview
The personality-assistant-registry provides MCP server definitions and templates for the desktop app.
Primary files:
registry.json(source of truth)templates/JSON files (human-editable copies; keep in sync)docs/markdown referenced bydocs.path
Registry Structure
{
"version": "X.Y.Z",
"updatedAt": "ISO timestamp",
"entries": [ /* MCP server definitions */ ],
"templates": [ /* Prompts, skills, bundles, presets */ ]
}
Adding MCP Server Entries
Add to the entries array:
{
"id": "my-mcp",
"name": "My MCP Server",
"summary": "Short description",
"version": "1.0.0",
"homepage": "https://github.com/...",
"category": "workspace|communication|developer-tools|analytics|etc",
"docs": {
"path": "docs/my-mcp.md"
},
"runtime": {
"preferred": "native|node",
"fallback": "native|node"
},
"install": {
"method": "manual|command",
"instructions": "For manual installs...",
"command": "npx -y @scope/mcp-server",
"notes": "Required env vars..."
},
"artifacts": [
{
"platform": "windows|macos|linux",
"arch": "x86_64|aarch64",
"url": "https://github.com/.../releases/download/vX.Y.Z/file.zip",
"sha256": "hash...",
"filename": "file.zip",
"entrypoint": "dist/index.js",
"size": 12345
}
],
"env": [
{
"key": "API_TOKEN",
"type": "secret|string|boolean|enum",
"required": true,
"label": "API Token",
"help": "Description...",
"placeholder": "...",
"default": "...",
"values": ["option1", "option2"],
"advanced": false,
"picker": "file|directory",
"multiline": false
}
]
}
Notes:
install.method: "command"should be non-interactive (npx -y ...), especially formcp-remote.docs.pathmust be a repo-relative file committed to the registry repo (no local absolute paths).requiresvalues must referenceentries[].idand must not includemcp:prefixes.
Adding Templates
Templates go in the templates array. Template types:
assistant-prompt- Agent templates shown in Discover -> Agent Templatesassistant-preset- Model presets shown in Discover -> Models & presetsheartbeat-task- Background task promptsskill- Reusable skill definitions shown in Discover -> Skillsskill-bundle- Skill pack metadata (Superpowers-style)plugin- Plugin definitions
Agent Templates (assistant-prompt)
{
"id": "my-template",
"type": "assistant-prompt",
"name": "My Template",
"summary": "Short description",
"tags": ["tag1", "tag2"],
"requires": ["some-mcp-id"],
"prompt": "System prompt for this assistant...",
"suggestions": ["A useful starter prompt", "Another suggested question"]
}
Heartbeat Tasks
{
"id": "my-heartbeat",
"type": "heartbeat-task",
"name": "My Task",
"summary": "Short description",
"tags": ["tag1"],
"requires": ["slack-mcp"],
"task": {
"prompt": "HEARTBEAT TASK: ...\n\n1. Step one\n2. Step two",
"intervalMinutes": 60,
"useGlobalSources": true,
"sources": [],
"schemaTargets": ""
}
}
Skills
{
"id": "my-skill",
"type": "skill",
"name": "My Skill",
"summary": "Short description",
"tags": ["tag1", "tag2"],
"prompt": "Description of when to use this skill and what it does..."
}
Skill Bundles
Use skill-bundle to describe packs that need a bootstrap, shared install, or
cross-skill workflow (e.g., Superpowers). Keep bundle metadata lightweight and
put detailed instructions in docs.
{
"id": "superpowers-bundle",
"type": "skill-bundle",
"name": "Superpowers",
"summary": "Workflow bundle of interdependent skills and bootstraps.",
"version": "x.y.z",
"docs": { "url": "https://github.com/obra/superpowers" },
"skills": ["superpowers:brainstorming", "superpowers:writing-plans"],
"install": {
"method": "manual",
"instructions": "Claude Code: /plugin install superpowers@superpowers-marketplace\nCodex: clone https://github.com/obra/superpowers into ~/.codex/superpowers and add the AGENTS bootstrap.",
"notes": "Codex CLI currently requires a CJS/ESM fix for skills-core import."
},
"backends": ["claude-code", "codex-cli"]
}
External Skill Packs (Normalization)
When adding skills from external repos (Superpowers, Automattic/agent-skills):
- Inspect the repo to identify
SKILL.mdfiles orskill.yaml. - Extract name/summary and convert each to
templates[]entries (type: "skill"). - Add a
skill-bundleentry if the pack requires shared bootstrap or workflow. - Inject a compatibility preamble for multi-backend usage (tool mapping + fallbacks).
- Update the desktop app types/UI if you add a new template type.
Example conversion:
{
"id": "wp-block-development",
"type": "skill",
"name": "WP Block Development",
"summary": "Gutenberg blocks: block.json, attributes, rendering, deprecations.",
"tags": ["wordpress", "gutenberg", "blocks"],
"prompt": "Use when developing WordPress (Gutenberg) blocks..."
}
Multi-Backend Compatibility
For Claude Code, Codex, and OpenAI Agents, include deterministic tool mapping:
- Define canonical tools (read, write, shell, mcp, plan)
- Map to backend-specific names (ex:
TodoWrite -> update_plan,Bash -> shell_command) - Note unsupported features (subagents, web search, image support) in the prompt
When a skill is backend-specific, declare the scope in docs or tags and provide fallback instructions for other backends.
Validation Checklist
After editing registry.json:
Validate JSON syntax:
node -e "JSON.parse(require('fs').readFileSync('registry.json', 'utf8')); console.log('JSON valid')"Update version fields:
- Increment
versionat the top (semver: major.minor.patch) - Update
updatedAttimestamp
- Increment
Check required fields:
- MCP entries:
id,name,summary,runtime,install - Templates:
id,type,name,summary requiresvalues matchentries[].id(nomcp:prefixes)
- MCP entries:
Update app types when adding new template types:
apps/desktop/src/lib/registry.ts(type unions)apps/desktop/src/pages/Discover.tsx(filters and labels)
Desktop App Code References
The registry is consumed by:
apps/desktop/src/lib/registry.ts- TypeScript typesapps/desktop/src/pages/Discover.tsx- Template displayapps/desktop/src/pages/McpStore.tsx- MCP managementapps/desktop/DISCOVER.md- IA reference and registry model notesapps/desktop/CLAUDE.md- Registry update instructions
Key type definitions:
// RegistryTemplate types
type: "heartbeat-task" | "assistant-prompt" | "assistant-preset" | "skill" | "skill-bundle" | "plugin"
// Discover.tsx filters:
// - Agent Templates: templates.filter(t => t.type === "assistant-prompt")
// - Skills: templates.filter(t => t.type === "skill" or "skill-bundle")
// - Prompt Templates: types "assistant-prompt", "heartbeat-task", "plugin"
Common Mistakes to Avoid
- Putting skills in wrong location: Skills go in
templates[]withtype: "skill", not a separateskills[]array - Missing type field: Templates must have a
typefield - Invalid JSON: Always validate after editing
- Stale version: Remember to bump
versionandupdatedAt - Interactive install commands: Use
npx -y ...to avoid prompts - Wrong requires syntax: Use plain MCP IDs (no
mcp:prefix) - Docs pointing to local paths:
docs.pathmust be repo-relative and committed - New template types without UI support: Update
registry.ts+Discover.tsx