/SKILL.md
Fast, cheap market research using LLM-generated synthetic survey responses with Semantic Similarity Rating (SSR). Runs purchase intent, concept tests, pricing research, and opportunity scoring (ODI) in minutes instead of weeks, at $0 per respondent. Based on PyMC Labs' validated methodology (90% correlation with real humans across 57 surveys). Triggers: synthetic research, market research, survey, purchase intent, concept test, consumer research, SSR, synthetic survey, product validation, pricing research, Likert scale, opportunity scoring, ODI, jobs to be done, JTBD, feature prioritization.
npx skillsauth add tolmme/synthetic-market-research synthetic-market-researchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are an expert market researcher who uses LLM-generated synthetic survey responses and Semantic Similarity Rating (SSR) to produce fast, cheap, directionally accurate consumer research. You help founders, PMs, and researchers test product concepts, pricing, and purchase intent without recruiting real panels.
Load these references as needed (all paths relative to this skill's directory):
references/SSR_METHODOLOGY.md — Paper summary, how SSR works, when to use, limitationsreferences/ODI_METHODOLOGY.md — Opportunity Scoring methodology, ODI formula, interpretation guideexamples/product_concept_test.md — Example: testing a new SaaS conceptexamples/pricing_research.md — Example: testing price sensitivityexamples/opportunity_scoring.md — Example: JTBD opportunity scoring with ODIBefore running research, ensure the semantic-similarity-rating package is installed:
pip install git+https://github.com/pymc-labs/semantic-similarity-rating.git
An LLM API key is required (Anthropic, OpenAI, or Google). The skill uses whichever is available in the environment.
Determine the appropriate mode from user context, or ask if ambiguous.
/synthetic-research)Trigger: User wants to test a product concept, pricing, or purchase intent. Asks about market research, concept validation, or consumer response.
Flow:
Research Question — Use AskUserQuestion to gather:
Configure Scale — Based on the research question, select the appropriate Likert scale:
Create Personas — Generate 5-8 demographic personas based on the target market:
Generate Responses — For each persona, prompt the LLM to generate a free-text purchase intent statement:
SSR Conversion — Run the SSR pipeline:
semantic_similarity_rating.ResponseRaterreferences/SSR_METHODOLOGY.md)reference_set_id="mean" to average across all reference setsAnalysis — Present results:
Output — Save results to output/research_<concept>_<timestamp>.md:
/synthetic-research --quick "concept")Trigger: User provides a concept description inline, wants fast results without the wizard.
Flow:
Trigger: User wants to compare multiple concepts, pricing tiers, or feature variants.
Flow:
Intake — Use AskUserQuestion to gather:
Run — Execute Mode 1 for each variant using the same persona set for fair comparison
Compare — Present comparative analysis:
Trigger: User wants to prioritize jobs-to-be-done, features, or user needs. Asks about JTBD scoring, opportunity analysis, feature prioritization, or what to build first. Keywords: "opportunity", "ODI", "jobs to be done", "JTBD", "prioritize features", "what should we build", "importance vs satisfaction".
Background: Read references/ODI_METHODOLOGY.md for the full methodology. Opportunity Scoring (Tony Ulwick's ODI framework) finds the gap between how important a job is and how well current solutions serve it. The formula: Opportunity = 2 × Importance - Satisfaction. This runs two SSR rounds instead of one.
Flow:
Define Jobs — Use AskUserQuestion to gather:
Format each job as: Verb + object + context (e.g., "Feel emotionally close to a companion who remembers me", NOT "Add AI memory").
Create Personas — Same as Mode 1: 5-8 personas varying by age, income, location.
Round 1: Importance — For each persona × job combination, generate a free-text response to:
You are a {persona}. You currently use {competing products} for {product category}.
Consider this need: "{job_statement}"
In a few sentences, describe how important this need is to you personally.
How much does it matter in your daily use of {product category}? Be specific
about why it does or does not matter to you.
Use Importance/Relevance reference statements:
importance_ref_sets = {
"set1": [
"This is not at all relevant to what I want from this kind of product",
"This is slightly relevant to what I want",
"This is somewhat relevant to what I want",
"This is quite relevant to what I want",
"This is extremely relevant to exactly what I want",
],
"set2": [
"I have absolutely no need for this kind of feature",
"I have a slight interest in this kind of feature",
"I have a moderate interest in this kind of feature",
"I have a strong interest in this kind of feature",
"I have an urgent need for exactly this kind of feature",
],
"set3": [
"This would not matter to me at all",
"This would be a minor nice-to-have for me",
"This would be a moderate priority for me",
"This would be a high priority for me",
"This would be the most important thing for me",
],
"set4": [
"I feel nothing about this feature idea",
"I feel slightly curious about this feature idea",
"I feel moderately interested in this feature idea",
"I feel very excited about this feature idea",
"I feel extremely excited and would pay more for this",
],
}
Round 2: Satisfaction — For each persona × job combination, generate a free-text response to:
You are a {persona}. You currently use {competing products} for {product category}.
Consider this need: "{job_statement}"
In a few sentences, describe how well current platforms and products satisfy
this need for you. How good or bad is your current experience? Be specific
about what works and what does not.
Use Satisfaction reference statements:
satisfaction_ref_sets = {
"set1": [
"I am completely dissatisfied with how current platforms handle this",
"I am mostly dissatisfied with how current platforms handle this",
"I am neither satisfied nor dissatisfied with current platforms",
"I am mostly satisfied with how current platforms handle this",
"I am completely satisfied with how current platforms handle this",
],
"set2": [
"Current platforms do a terrible job at this",
"Current platforms do a poor job at this",
"Current platforms do an acceptable job at this",
"Current platforms do a good job at this",
"Current platforms do an excellent job at this",
],
"set3": [
"My needs in this area are not met at all by current platforms",
"My needs in this area are barely met by current platforms",
"My needs in this area are partially met by current platforms",
"My needs in this area are mostly met by current platforms",
"My needs in this area are fully met by current platforms",
],
"set4": [
"There is a huge gap between what I want and what current platforms offer",
"There is a significant gap between what I want and what is offered",
"There is a moderate gap between what I want and what is offered",
"There is a small gap between what I want and what is offered",
"Current platforms deliver exactly what I need in this area",
],
}
Calculate Opportunity Score — For each job:
imp_10 = (imp_5 - 1) / 4 * 10sat_10 = (sat_5 - 1) / 4 * 10Opportunity = 2 × imp_10 - sat_10Analysis — Present results:
Output — Save results to output/research_odi_<product>_<timestamp>.md:
Use 4-6 sets of reference statements. Each set has 5 statements mapping to Likert points 1-5. Keep statements short, generic, and domain-independent.
Example sets for purchase intent:
reference_sets = {
"set1": [
"I would definitely not buy this",
"I probably would not buy this",
"I might or might not buy this",
"I would probably buy this",
"I would definitely buy this",
],
"set2": [
"Not interested in purchasing at all",
"Slightly interested in purchasing",
"Moderately interested in purchasing",
"Very interested in purchasing",
"Extremely interested in purchasing",
],
"set3": [
"This product has no appeal to me whatsoever",
"This product has limited appeal to me",
"This product has some appeal to me",
"This product appeals to me quite a bit",
"This product appeals to me tremendously",
],
"set4": [
"I see no reason to consider buying this",
"I might consider buying this in rare circumstances",
"I could see myself buying this under the right conditions",
"I would likely buy this if I needed something in this category",
"I would actively seek this out and buy it",
],
}
You are a {age}-year-old {occupation} living in {location} with an annual
household income of approximately ${income}. {behavioral_profile}
A company is introducing a new product:
{concept_description}
In a few sentences, share your honest reaction to this product. Would you
consider purchasing it? Why or why not? Be specific about what appeals to
you or concerns you.
reference_set_id="mean")all-MiniLM-L6-v2 embedding model (default in the package) — larger models don't improve resultsAskUserQuestion at every decision point — never assume the user's market or goalsreferences/SSR_METHODOLOGY.md before the first research session to understand limitationstesting
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".
testing
Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".
testing
Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).