EdwardAF-IT/Personetta

Composable YAML roles and recipes for AI coding assistants. Generates and installs tool-native rules for Cursor, GitHub Copilot, Claude, and Cline.

2

stars

12

commits

Python

primary language

Aug 29, 2026

updated

ai
claude
cli
cursor
developer-tools
github-copilot
personas

README

Personetta

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.

CI PyPI Python 3.11+ Tests License: MIT


Why Personetta?

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/

Install

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+

60-second demo

# 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

Everyday commands

CommandPurpose
personetta install '*' --format <tool>Install all recipes (wildcards supported: 'test-*', '*python*')
personetta listList available roles and recipes
personetta set-active <recipe> --format <tool>Switch the active persona
personetta currentShow the active recipe
personetta recipe <name> --format <tool>Print one composed recipe
personetta validateValidate all YAML against the JSON Schemas
personetta verifyCheck install health (version, PATH, recipe data)
personetta remove '<pattern>' --format <tool>Remove installed recipes

Full reference: docs/cli-reference.md

How it works

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 · docs/concepts.md

Quality

  • 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

Documentation

Quick StartUp and running in 5 minutes
User GuideComplete workflows
Core ConceptsHow composition works (with diagrams)
Recipe GuideCreating and customizing recipes
CLI ReferenceEvery command and flag
ArchitectureTechnical design
ContributingPR process and standards
TroubleshootingCommon issues

License

MIT © 2026 Edward Fry

Contributors

EdwardAF-IT

12 commits

EdwardAF-IT/Personetta

Composable YAML roles and recipes for AI coding assistants. Generates and installs tool-native rules for Cursor, GitHub Copilot, Claude, and Cline.

2

stars

12

commits

Python

primary language

Aug 29, 2026

updated

ai
claude
cli
cursor
developer-tools
github-copilot
personas

README

Personetta

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.

CI PyPI Python 3.11+ Tests License: MIT


Why Personetta?

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/

Install

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+

60-second demo

# 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

Everyday commands

CommandPurpose
personetta install '*' --format <tool>Install all recipes (wildcards supported: 'test-*', '*python*')
personetta listList available roles and recipes
personetta set-active <recipe> --format <tool>Switch the active persona
personetta currentShow the active recipe
personetta recipe <name> --format <tool>Print one composed recipe
personetta validateValidate all YAML against the JSON Schemas
personetta verifyCheck install health (version, PATH, recipe data)
personetta remove '<pattern>' --format <tool>Remove installed recipes

Full reference: docs/cli-reference.md

How it works

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 · docs/concepts.md

Quality

  • 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

Documentation

Quick StartUp and running in 5 minutes
User GuideComplete workflows
Core ConceptsHow composition works (with diagrams)
Recipe GuideCreating and customizing recipes
CLI ReferenceEvery command and flag
ArchitectureTechnical design
ContributingPR process and standards
TroubleshootingCommon issues

License

MIT © 2026 Edward Fry

Contributors

EdwardAF-IT

12 commits

Languages

Python

98.6%

PowerShell

1.2%