# Personetta – One YAML Persona for Cursor, Copilot, Claude, and Cline

> Source: <https://github.com/EdwardAF-IT/Personetta>
> Published: 2026-08-19 01:07:49+00:00

**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](https://pipx.pypa.io/):

```
pipx install personetta
```

Convenience scripts (PATH setup + verification) ship in [ scripts/](/EdwardAF-IT/Personetta/blob/main/scripts):

`Setup-Personetta.ps1`

for Windows, `install-personetta.sh`

for Linux/macOS.**Requirements:** Python 3.11+

```
# 1. Install
pip install personetta

# 2. See what personas are available (design, implement, review, test — per language)
personetta list

# 3. Install every recipe for your tool (cursor | copilot | claude | cline)
personetta install '*' --format claude

# 4. Activate the persona you want right now
personetta set-active implement-python --format claude

# 5. Confirm everything is healthy
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](/EdwardAF-IT/Personetta/blob/main/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 layers`data/recipes/`

— the composition: which layers, in what order, with what overrides`data/config/merge-config.yaml`

— field-by-field merge strategies and conflict rules`data/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](/EdwardAF-IT/Personetta/blob/main/docs/architecture.md) · [docs/concepts.md](/EdwardAF-IT/Personetta/blob/main/docs/concepts.md)

**1,641 passing tests** across unit, integration, and quality suites**Automated quality guards** enforced in pytest: cyclomatic complexity ≤ 10, function size ≤ 25 lines, file size ≤ 400 lines, method and import count limits, workspace-convention checks**Packaging 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 Guide](/EdwardAF-IT/Personetta/blob/main/docs/user-guide.md)[Core Concepts](/EdwardAF-IT/Personetta/blob/main/docs/concepts.md)[Recipe Guide](/EdwardAF-IT/Personetta/blob/main/docs/recipe-guide.md)[CLI Reference](/EdwardAF-IT/Personetta/blob/main/docs/cli-reference.md)[Architecture](/EdwardAF-IT/Personetta/blob/main/docs/architecture.md)[Contributing](/EdwardAF-IT/Personetta/blob/main/docs/contributing.md)[Troubleshooting](/EdwardAF-IT/Personetta/blob/main/docs/troubleshooting.md)[MIT](/EdwardAF-IT/Personetta/blob/main/LICENSE) © 2026 Edward Fry
