Persona Management logo

Persona Management

Community
XuanRanL
persona-management

Create + store + enforce writing personas using NNGroup 4-dimension tone framework. Personas define readability targets, sentence length distribution, vocabulary tier, contraction frequency, summary box label. Used by section-drafter + humanizer + rewrite to enforce consistent voice. Different from brand-guideline-maker — personas live INSIDE a brand and represent author/audience variants.

Overview

PublisherXuanRanL
Repositoryloamwright-SEO-Skill
Skill namepersona-management
Stars
52
Forks
9
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by XuanRanL on GitHub. Read the source before you install it.

Installation

Install the Persona Management AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/XuanRanL/loamwright-SEO-Skill/tree/main/subskills/cross-cutting/persona-management
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/XuanRanL/loamwright-SEO-Skill.git /tmp/loamwright-SEO-Skill
mkdir -p .claude/skills
cp -r /tmp/loamwright-SEO-Skill/subskills/cross-cutting/persona-management .claude/skills/persona-management
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Persona Management in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Persona Management on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Persona Management is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Persona Management · Writing Voice Profiles

Create, store, enforce writing personas. Different from brand-guideline-maker (which is the brand-level voice) — personas live INSIDE a brand and represent author voices OR audience-tuned variants (e.g., one brand might have "Director persona" for C-suite content + "Practitioner persona" for IC-level content).

Commands

CommandPurpose
/persona createInteractive interview to build a new persona
/persona list [--project X]Show all saved personas (optionally per project)
/persona use <name>Set active persona for current session
/persona show <name>Display full persona profile
/persona delete <name>Tombstone a persona

Create workflow · 6-step interview

Run the interactive interview. Ask each step, wait for response, then proceed.

Step 1: Brand + audience basics

Ask:

  • Persona name (kebab-case slug)
  • Brand or sub-brand this persona writes for
  • Industry — primary sector
  • Target audience — role + experience level + goals (one persona = one audience segment)
  • One-sentence mission — what this persona helps people do

Step 2: Tone dimensions (NNGroup 4-dimension framework)

Present each dimension as a 0.0 to 1.0 slider. Explain both ends with examples.

Dimension0.0 End1.0 EndExample at 0.0Example at 1.0
funny_seriousFunnySerious"Let's be real, nobody reads Terms of Service""Understanding legal agreements protects your business"
formal_casualFormalCasual"We are pleased to announce""Guess what — we shipped it!"
respectful_irreverentRespectfulIrreverent"We appreciate your patience""Yeah, that old way was broken"
enthusiastic_matter_of_factEnthusiasticMatter-of-fact"This changes everything!""Here are the results."

Defaults if user unsure: [0.6, 0.5, 0.3, 0.5] (slightly serious, balanced formality, respectful, balanced enthusiasm).

Step 3: Writing rules

Ask vocabulary tier first → auto-suggest matching readability band → user can override.

SettingQuestionDefault
Vocabulary tierConsumer / Professional / TechnicalProfessional
Readability bandAuto-filled from tier (see table)Grade 8-10
Sentence length meanAverage words per sentence18
Sentence length stdVariation (target burstiness)6
Contraction frequency0.0 (never) to 1.0 (always)0.6
Max passive voicePercentage cap on passive10%

Step 4: Do's and Don'ts

Ask for 3-5 items in each list. Provide starter examples based on tone dimensions.

Example Do's:

  • "Use data to back claims"
  • "Address the reader as you"
  • "Open with a question or stat"

Example Don'ts:

  • "Don't use jargon without defining it"
  • "Don't start sentences with There is/There are"
  • "Don't use cliches like game-changer"

Step 5: Summary label preference

Label used for summary/takeaway boxes:

  • Key Takeaways (default)
  • The Bottom Line
  • What You'll Learn
  • TL;DR
  • Quick Summary
  • In a Nutshell
  • Custom label

Step 6: Voice samples (optional but valuable)

Ask if user has 1-3 URLs of existing content exemplifying the desired voice.

For each URL:

  1. Fetch via scripts/fetch/tavily_extract.py (advanced + markdown)
  2. Run analysis:
    bash
    python -m scripts.lint.sentence_variance --input <text> --json
    python -m scripts.lint.perplexity_estimator --input <text> --json
    python -m scripts.lint.ai_tells_detector --input <text> --json
  3. Extract: sentence length mean/std, contraction rate, tone dimension estimates, vocabulary level

Compare extracted values with persona settings → flag mismatches.

Save

Write completed persona JSON to:

projects/{slug}/personas/{persona-name}.json

Use kebab-case filename (e.g., cfo-thought-leader.json).

Persona profile schema

json
{
  "name": "cfo-thought-leader",
  "description": "Analyst voice for finance VP audience",
  "brand": "Acme Corp",
  "industry": "B2B SaaS / FinTech",
  "audience": "CFOs + finance VPs at series B-D companies",
  "mission": "Help finance leaders choose analytics tools",
  "tone_dimensions": {
    "funny_serious": 0.85,
    "formal_casual": 0.30,
    "respectful_irreverent": 0.20,
    "enthusiastic_matter_of_fact": 0.40
  },
  "readability": {
    "flesch_grade_min": 9,
    "flesch_grade_max": 11,
    "flesch_ease_min": 45,
    "flesch_ease_max": 55
  },
  "style": {
    "sentence_length_mean": 16,
    "sentence_length_std": 8,
    "contraction_frequency": 0.40,
    "passive_voice_max_pct": 8,
    "vocabulary_tier": "professional",
    "summary_label": "Key Takeaways"
  },
  "voice_samples": [
    "https://acme.com/blog/cfo-toolkit",
    "https://acme.com/blog/forecasting-accuracy"
  ],
  "voice_sample_analysis": {
    "actual_sentence_mean": 15.8,
    "actual_contraction_rate": 0.37,
    "actual_burstiness_sd": 7.4,
    "tone_estimate": [0.83, 0.28, 0.22, 0.42],
    "matches_settings": true
  },
  "do": [
    "Use data to back every major claim",
    "Address the reader directly as you",
    "Lead sections with actionable insight"
  ],
  "dont": [
    "Don't use buzzwords without context",
    "Don't write sentences longer than 30 words",
    "Don't open with We at Acme"
  ],
  "created_at": "2026-05-19",
  "active_for_project": "acme-corp-site",
  "tombstoned": false
}

Readability bands by vocabulary tier

TierFlesch GradeFlesch EaseTypical use
Consumer6-860-80Health, lifestyle, personal finance
Professional8-1050-60B2B, marketing, management
Technical10-1230-50Engineering, medical, legal

When user picks a tier, auto-fill readability fields. Let them override for non-standard combinations (e.g., technical vocabulary at consumer readability for explainer content).

Integration with /article + /rewrite

When a persona is active (via /persona use <name>):

  1. Pre-generation — Load persona JSON, inject tone dimensions + style rules into the system prompt for section-drafter (writer agent)
  2. During generation — Writer follows do/dont rules, targets sentence length mean/std, uses contractions at specified frequency
  3. Post-generation validation — Check output against persona constraints:
    • Sentence length distribution within 1σ of target mean
    • Readability score within specified grade band
    • Passive voice percentage under max
    • No violations of "dont" rules (via pattern matching)
  4. Validation fails → flag specific violations + suggest edits via humanizer

When to create multiple personas vs single brand-guideline

Use a single brand-guidelineUse multiple personas
One audience segment, one voiceMultiple audience segments (C-suite + IC + customers)
Solo founder contentMulti-author blog
Niche site (one topic)Hub site (many topic clusters with different voices)
Always same toneNeed formal voice for whitepapers + casual for blog

Personas live INSIDE a brand-guideline.yaml. Brand-level rules (banned words, AI visibility settings) apply universally; persona rules override per article when one is active.

List command

Glob projects/{slug}/personas/*.json (or all projects if no filter):

PersonaBrandAudienceVocabularyActive
cfo-thought-leaderAcme CorpFinance VPsProfessional✓
practitioner-guideAcme CorpSenior analystsTechnical—
starter-friendlyAcme CorpJunior analystsConsumer—

If no personas: prompt to create one.

Show command

Read persona JSON + display formatted summary with all tone dimensions, style rules, do/dont lists.

Use command

Read persona JSON + confirm activation. Print summary of constraints that'll be enforced. Persona stays active for current conversation session. section-drafter and rewrite check for active persona before generating content.

Error handling

  • Invalid tone values (outside 0.0-1.0): clamp to nearest valid bound + warn
  • Unreachable voice samples: skip + note in profile that sample unavailable
  • Empty personas directory: prompt user to create one first
  • Name conflicts during create: ask whether to overwrite or choose different name
  • Malformed JSON: report error + offer to recreate from interview

See also

  • subskills/plan/brand-guideline-maker/SKILL.md — brand-level voice (parent of personas)
  • references/style/voices/* — pre-built voice templates that can seed a persona
  • subskills/optimize/humanizer/SKILL.md — enforces persona constraints during cleanup
  • agents/writer.md — reads active persona for section-drafter dispatch

Frequently asked questions

What does the Persona Management AI skill do?

Create + store + enforce writing personas using NNGroup 4-dimension tone framework. Personas define readability targets, sentence length distribution, vocabulary tier, contraction frequency, summary box label. Used by section-drafter + humanizer + rewrite to enforce consistent voice. Different from brand-guideline-maker — personas live INSIDE a brand and represent author/audience variants.

Why use Persona Management on TypingMind?

Because you install it once and use it with any model. Persona Management is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Persona Management in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/XuanRanL/loamwright-SEO-Skill/tree/main/subskills/cross-cutting/persona-management. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Persona Management?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Persona Management?

As many as you like. As long as a model supports skills, you can use Persona Management with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Persona Management AI skill free?

Yes. It is published on GitHub by XuanRanL under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇