Composable AI personas for coding agents — define a role once in YAML, and Personetta renders and installs it natively for Cursor, GitHub Copilot, Claude Code, and Cline.
AI coding assistants are only as good as the instructions you give them — but every tool has its own rules format, its own file locations, and its own quirks. Keeping a consistent "senior Python reviewer" or "C# architect" persona across four different tools means maintaining four copies by hand.
Personetta solves this with composable recipes:
Write once— personas are layered YAML (base role + language + task), composed by a merge engine with explicit conflict rules.** Render everywhere**— one command generates tool-native output: Cursor rules, Copilot instructions, Claude Code memory, Cline rules.** Switch instantly**— activate a different persona per tool with a single command; recipes are pre-generated and cached.
recipes/*.yaml ──▶ compose (roles + layers) ──▶ render per tool ──▶ install
├─ ~/.cursor/rules/
├─ ~/.copilot/instructions/
├─ ~/.claude/rules/
└─ ~/Documents/Cline/Rules/
pip install personetta
Prefer an isolated CLI install? Use pipx:
pipx install personetta
Convenience scripts (PATH setup + verification) ship in scripts/:
Setup-Personetta.ps1
for Windows, install-personetta.sh
for Linux/macOS.Requirements: Python 3.11+
pip install personetta
personetta list
personetta install '*' --format claude
personetta set-active implement-python --format claude
personetta verify
Open your AI tool and ask "What role are you playing?" — it will describe the active persona. Switching is instant:
personetta set-active review-python --format claude
| Command | Purpose |
|---|---|
personetta install '*' --format <tool> |
|
Install all recipes (wildcards supported: 'test-*' , '*python*' ) |
|
personetta list |
|
| List available roles and recipes | |
personetta set-active <recipe> --format <tool> |
|
| Switch the active persona | |
personetta current |
|
| Show the active recipe | |
personetta recipe <name> --format <tool> |
|
| Print one composed recipe | |
personetta validate |
|
| Validate all YAML against the JSON Schemas | |
personetta verify |
|
| Check install health (version, PATH, recipe data) | |
personetta remove '<pattern>' --format <tool> |
|
| Remove installed recipes |
Full reference: docs/cli-reference.md
Personas are recipes composed from reusable role layers:
data/base/
— foundational roles (engineer, reviewer, tester…)data/language_specific/
— language and framework layersdata/recipes/
— the composition: which layers, in what order, with what overridesdata/config/merge-config.yaml
— field-by-field merge strategies and conflict rulesdata/schemas/
— JSON Schemas that validate every YAML file
The generator (src/generator/
) loads, validates, composes, and renders each recipe through per-tool formatters, then installs three files per tool: an always-on baseline, a router index of every persona, and the full active recipe — plus a local cache so switching personas never regenerates anything.
Details: docs/architecture.md · docs/concepts.md
1,641 passing tests across unit, integration, and quality suitesAutomated quality guards enforced in pytest: cyclomatic complexity ≤ 10, function size ≤ 25 lines, file size ≤ 400 lines, method and import count limits, workspace-convention checksPackaging guards that build a real wheel and prove every recipe ships in it- Linted with ruff, type-checked with** mypy**, CI on every push
|
User GuideCore ConceptsRecipe GuideCLI ReferenceArchitectureContributingTroubleshootingMIT © 2026 Edward Fry