{"id":"4d640bd8-ed9c-428d-a897-d22a7b29caa6","shortId":"X3gfsj","kind":"skill","title":"user-persona-synthesizer","tagline":"Extract recurring profiles from real CustDev transcripts and generate evidence-backed persona cards. Use when synthesizing interviews into personas for product docs or roadmap. Triggers: 'synthesize personas', 'create user personas', 'extract personas from transcripts', 'синтезир","description":"# User Persona Synthesizer\n\nThis skill extracts recurring user profiles from real CustDev interview transcripts and generates structured, evidence-backed persona cards. It works from any free-form text or markdown files — no integrations, no special format required.\n\n**Input:**\n- Interview transcripts or notes: pasted text, markdown files, or plain text (any format accepted)\n- Optional: focus attributes (e.g., \"focus on goals and frustrations only\") or persona count preference\n\n**Output:**\n- Markdown document with a summary table, per-persona cards (with verbatim quotes), and synthesis notes\n\n---\n\n## Language Detection\n\nDetect the user's language from their message:\n- If Russian (or contains Cyrillic): respond in Russian\n- If English (or other Latin-script language): respond in English\n- If ambiguous: respond in the language of the trigger phrase used\n\n---\n\n## Instructions\n\n### Step 1: Validate and Parse Input\n\n1. Check that interview content is provided (pasted text or file reference)\n   - If input is empty or whitespace only: Stop. Return: \"No transcripts provided. Paste interview notes or reference files to begin persona synthesis.\"\n\n2. Detect input format\n   - If input resembles structured data (CSV column headers, spreadsheet rows): flag it — \"Structured data detected — extracting patterns from columns. For richer personas, raw interview text works better.\" Proceed.\n   - If input is clearly not interview content (product spec, article, meeting minutes with no respondent voices): Stop and report — \"This doesn't look like interview transcripts. Persona synthesis requires user interview content — notes, quotes, or dialogue with respondents.\"\n   - If user explicitly requests synthetic/hypothetical personas (not from real data): Stop and report — \"This skill synthesizes personas from real interview data only. For synthetic personas, ask Claude directly without this skill.\"\n\n3. Count the number of distinct interviews or respondents\n   - Use explicit separators (\"Interview 1:\", \"Respondent:\", \"---\", numbered sections) or infer from context\n   - Report count: \"Found N interview(s). Proceeding with synthesis.\"\n   - If only 1–2 interviews detected: flag low sample — \"Low sample size (N interviews) — patterns may not be representative. Consider adding more interviews before sharing with stakeholders.\" Continue.\n\n### Step 2: Extract Attributes per Respondent\n\n1. Check if the user specified a focus attribute list (e.g., \"focus on goals and frustrations only\")\n   - If yes: extract only the specified attributes; skip others\n   - If no: extract all attributes listed below\n\n2. For each interview, extract the following attributes where present:\n   - **Role / context:** job title, industry, company size, usage environment\n   - **Goals:** what they're trying to achieve; motivations\n   - **Frustrations:** pain points, complaints, blockers\n   - **Behaviours & workarounds:** how they currently solve the problem; tools used\n   - **Vocabulary:** recurring words or phrases they use to describe the domain\n   - **Key quotes:** verbatim sentences that capture their perspective (capture at least 1–2 per respondent)\n\n3. Build a per-respondent attribute map (internal working structure; not shown to user)\n\n### Step 3: Cluster Respondents into Persona Candidates\n\n1. Compare attribute maps across all respondents\n2. Group respondents who share ≥2 significant attributes (role pattern, shared goal, or shared frustration)\n   - Each group with ≥2 respondents becomes a persona candidate\n   - Solo respondents (no matches) are noted as outliers in Synthesis Notes\n\n3. If no clusters form (all respondents unique): Report — \"No clear clusters found across N interviews. Possible reasons: small sample, very diverse audience, or inconsistent interview questions.\" Offer to generate individual profiles instead.\n\n4. If a persona count preference was provided: adjust clustering to aim for that count (merge close clusters or split divergent ones)\n\n### Step 4: Name and Describe Each Persona\n\n1. For each cluster, generate a descriptive label that captures the dominant pattern\n   - Format: \"The [Adjective] [Role or Archetype]\" (e.g., \"The Overwhelmed Manager\", \"The Data-Driven Analyst\")\n   - Label should be memorable and based on dominant attributes, not invented arbitrarily\n\n2. Write a 2–3 sentence profile description covering: who they are, what they do, and what they need\n\n### Step 5: Build Persona Cards\n\nFor each persona, generate a structured card with:\n- Name (descriptive label from Step 4)\n- Respondent count (N of M)\n- Profile description\n- Goals (bullet list)\n- Frustrations (bullet list)\n- Key quotes (verbatim, sourced from transcripts)\n- Behaviours & workarounds (bullet list)\n\n### Step 6: Write Synthesis Notes\n\n1. Identify overlaps — attributes shared across multiple personas\n2. Identify tensions — contradictory needs between personas (e.g., Persona A wants automation, Persona B wants manual control)\n3. Identify gaps — underrepresented segments if detectable from transcript context\n4. Note any outlier respondents who didn't fit any cluster\n\n### Step 7: Assemble and Output Document\n\n1. Generate markdown document following the Output Format below\n2. Ensure summary table appears first, followed by individual persona cards, then synthesis notes\n3. Validate: no persona card is missing a verbatim quote; all respondents are accounted for in either a cluster or the outliers note\n\n---\n\n## Negative Cases\n\n- **Empty input:** Stop before processing. Return: \"No transcripts provided.\"\n- **Non-interview input detected:** Stop. Return explanation and what type of content is needed.\n- **Request for synthetic personas:** Stop. Redirect user to ask Claude directly without this skill.\n\n---\n\n## Output Format\n\nMarkdown document with the following structure:\n\n```markdown\n## User Persona Synthesis — [Date]\n\n**Source:** [N] interview transcripts / notes\n**Personas found:** [count]\n**Total respondents mapped:** [N of M]\n\n---\n\n### Summary Table\n\n| Persona | Respondents | Top Attributes |\n|---------|-------------|----------------|\n| [Name]  | N of M      | attr1, attr2, attr3 |\n\n---\n\n### Persona 1: [Name]\n\n**Respondents:** N of M\n**Profile:** [2–3 sentence description]\n\n**Goals:**\n- [Goal 1]\n- [Goal 2]\n\n**Frustrations:**\n- [Frustration 1]\n- [Frustration 2]\n\n**Key quotes:**\n> \"[Verbatim quote from transcript]\"\n\n**Behaviours & workarounds:**\n- [Behaviour or workaround]\n\n**Vocabulary patterns:**\n- [Recurring terms or phrases] *(omit section if no distinct vocabulary detected)*\n\n---\n\n### Synthesis Notes\n\n- **Overlaps:** [shared attributes across personas]\n- **Tensions:** [contradictory needs between personas]\n- **Gaps:** [underrepresented segments, if detectable]\n- **Outliers:** [respondents who didn't fit any cluster]\n```\n\n**Field rules:**\n- Key quotes must be verbatim (no paraphrasing)\n- Persona names should be descriptive labels, not generic identifiers (\"Persona A\")\n- Summary table must list all personas; respondent counts must sum to ≤ total N\n- Synthesis Notes section always present, even if only gaps or outliers noted","tags":["user","persona","synthesizer","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-user-persona-synthesizer","topic-agent-skills","topic-agentic-skills","topic-ai-agents","topic-ai-skills","topic-awesome-list","topic-claude","topic-claude-ai","topic-claude-ai-skills","topic-claude-code","topic-claude-cowork","topic-claude-memory","topic-claude-skills"],"categories":["claude-skills-kit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/KirKruglov/claude-skills-kit/user-persona-synthesizer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add KirKruglov/claude-skills-kit","source_repo":"https://github.com/KirKruglov/claude-skills-kit","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (7,086 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:39.414Z","embedding":null,"createdAt":"2026-05-18T13:21:17.499Z","updatedAt":"2026-05-18T19:13:39.414Z","lastSeenAt":"2026-05-18T19:13:39.414Z","tsv":"'1':168,173,321,340,372,469,495,599,705,757,884,897,902 '2':207,341,367,405,470,502,507,520,639,642,713,766,891,899,904 '3':308,473,489,537,643,730,780,892 '4':570,593,676,740 '5':659 '6':701 '7':752 'accept':94 'account':793 'achiev':430 'across':499,550,710,934 'ad':358 'adject':614 'adjust':578 'aim':581 'alway':990 'ambigu':156 'analyst':626 'appear':770 'arbitrarili':638 'archetyp':617 'articl':248 'ask':302,837 'assembl':753 'attr1':880 'attr2':881 'attr3':882 'attribut':97,369,380,395,402,412,479,497,509,635,708,875,933 'audienc':559 'autom':724 'b':726 'back':16,60 'base':632 'becom':522 'begin':204 'behaviour':437,696,911,913 'better':237 'blocker':436 'build':474,660 'bullet':685,688,698 'candid':494,525 'captur':463,466,608 'card':18,62,119,662,669,776,784 'case':804 'check':174,373 'claud':303,838 'clear':242,547 'close':586 'cluster':490,540,548,579,587,602,750,798,953 'column':217,229 'compani':420 'compar':496 'complaint':435 'consid':357 'contain':139 'content':177,245,270,826 'context':328,416,739 'continu':365 'contradictori':716,937 'control':729 'count':107,309,330,574,584,678,863,981 'cover':647 'creat':33 'csv':216 'current':441 'custdev':10,52 'cyril':140 'data':215,224,286,297,624 'data-driven':623 'date':855 'describ':455,596 'descript':605,646,672,683,894,967 'detect':127,128,208,225,343,736,818,928,945 'dialogu':274 'didn':746,949 'direct':304,839 'distinct':313,926 'diverg':590 'divers':558 'doc':27 'document':111,756,760,846 'doesn':259 'domain':457 'domin':610,634 'driven':625 'e.g':98,382,618,720 'either':796 'empti':188,805 'english':145,154 'ensur':767 'environ':423 'even':992 'evid':15,59 'evidence-back':14,58 'explan':821 'explicit':279,318 'extract':5,36,46,226,368,391,400,409 'field':954 'file':73,88,183,202 'first':771 'fit':748,951 'flag':221,344 'focus':96,99,379,383 'follow':411,761,772,849 'form':69,541 'format':78,93,210,612,764,844 'found':331,549,862 'free':68 'free-form':67 'frustrat':103,387,432,516,687,900,901,903 'gap':732,941,995 'generat':13,56,566,603,666,758 'generic':970 'goal':101,385,424,513,684,895,896,898 'group':503,518 'header':218 'identifi':706,714,731,971 'inconsist':561 'individu':567,774 'industri':419 'infer':326 'input':80,172,186,209,212,240,806,817 'instead':569 'instruct':166 'integr':75 'intern':481 'interview':22,53,81,176,198,234,244,263,269,296,314,320,333,342,351,360,408,552,562,816,858 'invent':637 'job':417 'key':458,690,905,956 'label':606,627,673,968 'languag':126,132,151,160 'latin':149 'latin-script':148 'least':468 'like':262 'list':381,403,686,689,699,977 'look':261 'low':345,347 'm':681,869,879,889 'manag':621 'manual':728 'map':480,498,866 'markdown':72,87,110,759,845,851 'match':529 'may':353 'meet':249 'memor':630 'merg':585 'messag':135 'minut':250 'miss':786 'motiv':431 'multipl':711 'must':958,976,982 'n':332,350,551,679,857,867,877,887,986 'name':594,671,876,885,964 'need':657,717,828,938 'negat':803 'non':815 'non-interview':814 'note':84,125,199,271,531,536,704,741,779,802,860,930,988,998 'number':311,323 'offer':564 'omit':922 'one':591 'option':95 'other':397 'outlier':533,743,801,946,997 'output':109,755,763,843 'overlap':707,931 'overwhelm':620 'pain':433 'paraphras':962 'pars':171 'past':85,180,197 'pattern':227,352,511,611,917 'per':117,370,471,477 'per-persona':116 'per-respond':476 'persona':3,17,24,32,35,37,42,61,106,118,205,232,265,282,293,301,493,524,573,598,661,665,712,719,721,725,775,783,832,853,861,872,883,935,940,963,972,979 'perspect':465 'phrase':164,451,921 'plain':90 'point':434 'possibl':553 'prefer':108,575 'present':414,991 'problem':444 'proceed':238,335 'process':809 'product':26,246 'profil':7,49,568,645,682,890 'provid':179,196,577,813 'question':563 'quot':122,272,459,691,789,906,908,957 'raw':233 're':427 'real':9,51,285,295 'reason':554 'recur':6,47,448,918 'redirect':834 'refer':184,201 'report':257,289,329,545 'repres':356 'request':280,829 'requir':79,267 'resembl':213 'respond':141,152,157,253,276,316,322,371,472,478,491,501,504,521,527,543,677,744,791,865,873,886,947,980 'return':193,810,820 'richer':231 'roadmap':29 'role':415,510,615 'row':220 'rule':955 'russian':137,143 'sampl':346,348,556 'script':150 'section':324,923,989 'segment':734,943 'sentenc':461,644,893 'separ':319 'share':362,506,512,515,709,932 'shown':485 'signific':508 'size':349,421 'skill':45,291,307,842 'skill-user-persona-synthesizer' 'skip':396 'small':555 'solo':526 'solv':442 'sourc':693,856 'source-kirkruglov' 'spec':247 'special':77 'specifi':377,394 'split':589 'spreadsheet':219 'stakehold':364 'step':167,366,488,592,658,675,700,751 'stop':192,255,287,807,819,833 'structur':57,214,223,483,668,850 'sum':983 'summari':114,768,870,974 'synthes':4,21,31,43,292 'synthesi':124,206,266,337,535,703,778,854,929,987 'synthet':300,831 'synthetic/hypothetical':281 'tabl':115,769,871,975 'tension':715,936 'term':919 'text':70,86,91,181,235 'titl':418 'tool':445 'top':874 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agents' 'topic-ai-skills' 'topic-awesome-list' 'topic-claude' 'topic-claude-ai' 'topic-claude-ai-skills' 'topic-claude-code' 'topic-claude-cowork' 'topic-claude-memory' 'topic-claude-skills' 'total':864,985 'transcript':11,39,54,82,195,264,695,738,812,859,910 'tri':428 'trigger':30,163 'type':824 'underrepres':733,942 'uniqu':544 'usag':422 'use':19,165,317,446,453 'user':2,34,41,48,130,268,278,376,487,835,852 'user-persona-synthes':1 'valid':169,781 'verbatim':121,460,692,788,907,960 'vocabulari':447,916,927 'voic':254 'want':723,727 'whitespac':190 'without':305,840 'word':449 'work':64,236,482 'workaround':438,697,912,915 'write':640,702 'yes':390 'синтезир':40","prices":[{"id":"a250a0df-c402-45be-8f74-e1ba5d0ddc3d","listingId":"4d640bd8-ed9c-428d-a897-d22a7b29caa6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"KirKruglov","category":"claude-skills-kit","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:17.499Z"}],"sources":[{"listingId":"4d640bd8-ed9c-428d-a897-d22a7b29caa6","source":"github","sourceId":"KirKruglov/claude-skills-kit/user-persona-synthesizer","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/user-persona-synthesizer","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:17.499Z","lastSeenAt":"2026-05-18T19:13:39.414Z"}],"details":{"listingId":"4d640bd8-ed9c-428d-a897-d22a7b29caa6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"user-persona-synthesizer","github":{"repo":"KirKruglov/claude-skills-kit","stars":7,"topics":["agent-skills","agentic-skills","ai","ai-agents","ai-skills","awesome-list","claude","claude-ai","claude-ai-skills","claude-code","claude-cowork","claude-memory","claude-skills","memory-management","productivity","productivity-tools","project-management"],"license":"mit","html_url":"https://github.com/KirKruglov/claude-skills-kit","pushed_at":"2026-05-18T04:27:46Z","description":"40+ curated agent skills for Claude Cowork and Claude.ai — ready-to-use tools for non-technical users: project management, productivity, and AI workflow automation","skill_md_sha":"abac88f3992aaa6e4a2efe812267b805a0d730d9","skill_md_path":"skills/user-persona-synthesizer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/user-persona-synthesizer"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"user-persona-synthesizer","description":"Extract recurring profiles from real CustDev transcripts and generate evidence-backed persona cards. Use when synthesizing interviews into personas for product docs or roadmap. Triggers: 'synthesize personas', 'create user personas', 'extract personas from transcripts', 'синтезируй персоны', 'создай персоны из интервью', 'извлеки персоны из транскриптов'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/user-persona-synthesizer"},"updatedAt":"2026-05-18T19:13:39.414Z"}}