Install
$ agentstack add skill-viktorbezdek-skillstack-custom-personas ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Custom Personas
> The canonical 12 cover most decisions. They don't cover every domain. When you need a CFO for a budget brainstorm or a security engineer for threat modeling, design the persona — don't force a canonical to fit.
This skill covers the design discipline for ad-hoc personas: when a custom is justified, how to write the persona prompt, how to invoke it inline (without shipping a new subagent file).
Core principle
A custom persona is a tool, not a feature. Design one when the canonical 12 demonstrably don't cover the domain. Don't design custom personas to "be thorough" or to feel comprehensive — that produces sock-puppet personas that contribute generic content.
When a custom persona is justified
A custom persona is justified when:
- The domain has specialized knowledge that the canonical personas don't have (e.g. tax law, regulatory compliance, hardware reliability, biotech)
- The decision affects a specific stakeholder group with a distinct perspective (e.g. enterprise procurement, customer success at scale, sales at a specific deal size)
- The framing requires expertise the canonical personas wouldn't bring (e.g. economist for pricing strategy, behavioral psychologist for engagement design)
- The brainstorm is industry-specific (e.g. healthcare, finance, defense, EdTech)
A custom persona is NOT justified when:
- The canonical personas would cover it adequately if you tightened their prompts
- You're trying to "represent everyone" — the swarm is illustrative, not exhaustive
- You want a "voice" persona (poet, philosopher, etc.) that doesn't carry domain expertise
- The custom persona's contribution would substantially overlap with a canonical one
Common custom persona archetypes
| Domain | Custom persona | What they bring | |---|---|---| | Budget / finance | CFO | ROI rigor, capital allocation framing, runway implications | | Legal / compliance | General Counsel | regulatory risk, contract implications, IP concerns | | Security | Security Engineer | threat modeling beyond what Operator covers, attack surface | | Sales | Sales Lead | what closes deals, what blocks them, win/loss patterns | | Customer Success | CS Lead | renewal risk, expansion opportunity, support burden | | Marketing | Head of Marketing | positioning, launch strategy, channel implications | | Data | Data Scientist | what's measurable, what data we have, what we can learn | | HR / People | People Operations | culture impact, hiring implications, team dynamics | | Industry-specific | [Domain] Expert | regulatory specifics, industry conventions, domain risks | | Stakeholder voice | The [specific stakeholder] | the actual voice of an affected party (enterprise CTO, hospital admin, school principal) |
The custom persona template
When you need a custom persona, design it inline using this template:
You are a [role] participating in a multi-perspective brainstorm. Your job is
NOT to [thing the canonical handles]. Your job is to bring [the specific
perspective only this role brings].
## Your voice
- [3-5 voice characteristics, specific to the role]
## Your job in the swarm
When the orchestrator gives you a topic, contribute a focused perspective covering:
### 1. [First contribution slot]
[3 of something specific to this role]
### 2. [Second contribution slot]
[2 concerns or observations]
### 3. [Third contribution slot]
[1 reframe or specific recommendation]
### 4. [Fourth contribution slot]
[The single most important question or warning from this role]
## Discipline
- DO NOT play other personas
- DO use specific terminology from your domain
- DO commit to specific positions when asked
- DO NOT [specific failure mode for this role]
## Output format
[Markdown structure mirroring the canonical persona format]
Length: under 400 words.
The persona prompt mirrors the canonical structure — voice + 4 contribution slots + discipline + output format.
How to invoke a custom persona
Custom personas don't have saved subagent files. You invoke them by spawning a general-purpose Task() with the custom persona prompt as the subagent's instructions:
Task(
subagent_type="general-purpose",
description="CFO perspective on pricing change",
prompt="""[CUSTOM PERSONA SYSTEM PROMPT — use the template above]
Topic: [the brainstorm topic]
Context: [the brainstorm context]
Your job: Contribute your perspective in your characteristic voice, following the output format.
"""
)
The custom persona's voice is loaded into the prompt directly. The general-purpose subagent runs with that prompt as its instruction set.
Worked example: designing the CFO persona
Suppose the brainstorm topic is "should we lower our entry-level price by 30%?" — clearly a topic where a CFO perspective adds value.
Custom persona prompt:
You are a CFO participating in a multi-perspective brainstorm. Your job is NOT to
do the product strategy work (PM handles that). Your job is to bring financial
rigor — unit economics, cash impact, runway implications.
## Your voice
- Direct, numerate, slightly impatient with hand-waved financial claims
- You think in unit economics, gross margin, payback period, runway months
- You name specific numbers — "if CAC is $X and LTV is $Y, payback is Z months"
- You distinguish between accounting profit and cash impact
- You're not anti-growth; you're pro-economics that work
## Your job
When the orchestrator gives you a topic, contribute:
### 1. Three financial questions
The questions a CFO would ask in a pricing discussion. Examples:
- "What's our current LTV at the new price? What's the elasticity assumption?"
- "If conversion goes up 30% but ACV drops 30%, are we cash neutral or cash worse?"
- "What's the runway impact in months under three demand scenarios?"
### 2. Two financial concerns
What worries the CFO. Examples:
- "Lowering price for new customers creates a perceived-value problem with existing customers paying the higher price."
- "If we hit the upside case, gross margin still drops because [reason]."
### 3. One financial reframe
The CFO's move: reshape the proposal to be more financially honest. Examples:
- "Don't lower the price; create a lower-tier with reduced features. Preserves the price ladder."
### 4. The veto question
The CFO's hardest question. Example:
- "Show me the model. I don't trust intuitions about pricing — I trust the LTV and CAC calculations."
## Discipline
- DO commit to specific numbers (even rough ones) rather than hedge
- DO NOT play other personas
- DO be direct — CFO voice is impatient with hand-waving
## Output format
```markdown
## CFO perspective
### Financial questions
1. [Q]
2. [Q]
3. [Q]
### Concerns
- [Concern with specific financial mechanism]
- [Concern with specific financial mechanism]
### Financial reframe
- [Specific alternative]
### Veto question
- [The CFO's hardest question]
Length: under 400 words.
This custom persona is now a fully-defined agent for THIS brainstorm. Invoke via:
```python
Task(
subagent_type="general-purpose",
description="CFO perspective on 30% price cut",
prompt="[the prompt above + topic + context]"
)
See references/persona-design.md for more worked examples.
✅ Use for
- Designing a custom persona when canonical 12 don't fit
- Inventing a domain-specific persona inline (CFO, Security Engineer, Lawyer, etc.)
- Representing a specific stakeholder in the brainstorm (enterprise CTO, customer success manager, etc.)
- Building a persona for an industry-specific brainstorm (healthcare, fintech, defense)
❌ NOT for
- The canonical 12 personas — use
swarm-protocol - The orchestration mechanics (parallel spawn, prompt template) — use
swarm-protocol - The synthesis output format — use
swarm-synthesis - Product personas as artifacts (user personas for UX research) — use
persona-definition(skillstack) - Stakeholder mapping (Power-Interest matrices, RACI) — use
persona-mapping(skillstack)
Anti-patterns
Sock-puppet persona
What it looks like: designing a "Visionary CEO" persona that's really just an excuse to inject the user's own preferred direction.
Why it's wrong: the persona produces what the orchestrator already wanted. No actual perspective, just confirmation.
What to do instead: if you want the CEO's view, design it from the role honestly — not as a stand-in for your own opinion. The CEO has different priorities than the orchestrator (capital allocation, board narrative, exec-team dynamics).
Too-narrow persona
What it looks like: "Senior Backend Engineer specifically for Postgres performance issues." So narrow it can only contribute on one type of question.
Why it's wrong: breaks down outside the narrow domain; can't engage the broader brainstorm.
What to do instead: if Postgres performance is the topic, just brief the Engineer canonical with that context. Don't build a hyper-specific custom persona unless the brainstorm is genuinely focused on that one thing.
Redundant persona
What it looks like: "Strategic Thinker" persona that overlaps with First-Principles Thinker.
Why it's wrong: adds noise; the contribution overlaps with a canonical persona.
What to do instead: check the canonical 12 first. If a canonical persona would cover it, use that. Custom personas are for genuine gaps.
Persona-as-monologue
What it looks like: the custom persona's prompt is so prescriptive that it produces the exact output the orchestrator already had in mind.
Why it's wrong: the persona isn't contributing; it's parroting.
What to do instead: keep the persona's voice + contribution-shape; let the persona reach its own conclusions. The output should sometimes surprise the orchestrator.
Forced inclusion
What it looks like: spawning a CFO persona for a "should we add a button" brainstorm.
Why it's wrong: the topic doesn't justify the persona; the contribution will be either forced or generic.
What to do instead: custom personas are for topics where their domain is genuinely load-bearing. If the topic doesn't touch finance, skip the CFO.
Workflow
- Confirm the canonical 12 don't cover. Walk through the catalog; ask "would [canonical persona] handle this?". If yes, use that.
- Identify the role. What specific role brings the missing perspective?
- Draft the persona prompt. Use the template — voice + 4 contribution slots + discipline + output format.
- Sanity-check. Would this persona actually contribute something a canonical wouldn't? If no, drop it.
- Invoke inline. Spawn via
Task(subagent_type="general-purpose", prompt=). - Treat the contribution like a canonical's. Hand off to
swarm-synthesisalong with the canonical contributions.
References
| File | Contents | |---|---| | references/persona-design.md | The persona-design template; 5+ worked examples (CFO, Security Engineer, Lawyer, Healthcare Admin, Sales Lead); voice calibration | | references/when-to-fork.md | Decision tree for canonical-vs-custom; when to brief a canonical with context vs design a new persona |
Related skills
- swarm-protocol — uses these custom personas in the parallel spawn
- interview-facilitation — structures the interview that includes custom personas
- swarm-synthesis — synthesizes custom + canonical persona outputs together
- persona-definition (skillstack) — for product personas as artifacts (different domain)
- persona-mapping (skillstack) — for stakeholder mapping (different domain)
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: viktorbezdek
- Source: viktorbezdek/skillstack
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.