plugins/market-research-by-desire/skills/market-research-by-desire/SKILL.md
Desire-based market research automation. Triggers: "market research by desire", "desire research", "욕망 기반 시장조사", "욕망 리서치", "욕망에서 시장 찾기", "/market-research-by-desire"
npx skillsauth add jaykim88/claude-ai-engineering market-research-by-desireInstall 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.
Reverse-engineer market opportunities from human desires through 3-round interview and 5-agent analysis.
date '+%Y%m%d-%H%M%S' to get the exact current timestamp. Never estimate. Use this as project slug: YYYYMMDD-HHMMSSmkdir -p "$HOME/.market-research-by-desire/projects/{slug}/artifacts"
/tmp/market-research-by-desire/{slug}/artifactsconfig/settings.yaml for default settings. If missing, use defaults: language=ko, timeout=300output_dir path for all subsequent stepsDisplay: "욕망 기반 시장조사를 시작합니다"
AskUserQuestion(
questions=[{
"question": "어떤 욕망 영역을 탐색할까요? (Which desire domain?)",
"header": "욕망 카테고리",
"options": [
{"label": "성장과성취", "description": "실력 향상, 목표 달성, 학습, 커리어"},
{"label": "연결과소속", "description": "관계 형성, 커뮤니티, 외로움 해소"},
{"label": "자유와통제", "description": "시간/경제적 자유, 자율성, FIRE"},
{"label": "생존과안전", "description": "재정안정, 건강, 주거, 보안"}
],
"multiSelect": false
}]
)
If user selects "Other": accept custom input (e.g., "즐거움과자극", or freeform desire description).
Store the selected desire_category.
Read knowledge/desire-framework.md to find Level 2 sub-categories for the selected category.
Present sub-categories dynamically. Example for 성장과성취:
AskUserQuestion(
questions=[{
"question": "{desire_category}의 세부 욕망을 선택하세요:",
"header": "세부 욕망",
"options": [
{"label": "전문성개발", "description": "Skill development, 자격증, 교육"},
{"label": "커리어성장", "description": "Career advancement, 이직, 승진"},
{"label": "창업/부업", "description": "Side hustle, entrepreneurship"},
{"label": "자기계발", "description": "Productivity, 시간관리, 독서"}
],
"multiSelect": false
}]
)
Adapt options based on the category selected in Step 1. Each category has 3-4 sub-categories in desire-framework.md.
Store the selected desire_subcategory.
Ask all context questions in a single call:
AskUserQuestion(
questions=[
{
"question": "대상 시장은? (Target market)",
"header": "시장",
"options": [
{"label": "Korea", "description": "한국 시장 중심, 글로벌 참조"},
{"label": "Global", "description": "글로벌 시장, 한국 포함"},
{"label": "Korea + Japan", "description": "한일 시장 중심"}
],
"multiSelect": false
},
{
"question": "1인 개발 가능성을 우선할까요?",
"header": "Solo-dev",
"options": [
{"label": "Yes", "description": "1인 실행 가능한 기회 우선"},
{"label": "No preference", "description": "팀 규모 무관"}
],
"multiSelect": false
},
{
"question": "예산 제약은?",
"header": "예산",
"options": [
{"label": "Bootstrap", "description": "최소 자본, 유기적 성장"},
{"label": "VC-ready", "description": "투자 유치 가능"},
{"label": "No constraint", "description": "예산 제약 없음"}
],
"multiSelect": false
},
{
"question": "선호 산업은?",
"header": "산업",
"options": [
{"label": "Tech/SaaS", "description": "소프트웨어, 플랫폼"},
{"label": "Service", "description": "서비스, 컨설팅, 코칭"},
{"label": "E-commerce", "description": "커머스, 마켓플레이스"},
{"label": "Any", "description": "산업 무관"}
],
"multiSelect": false
}
]
)
Store all responses as context: target_market, solo_dev_preferred, budget_constraint, industry_preference.
Display interview summary:
욕망: {desire_category} > {desire_subcategory}
시장: {target_market} | Solo-dev: {solo_dev_preferred} | 예산: {budget_constraint} | 산업: {industry_preference}
Display: "Phase 1: 욕망 구조와 시장 동향을 분석합니다..."
Launch TWO Task() calls in a SINGLE response block for parallel execution:
Task 1: Desire Cartographer
Task(
subagent_type="general-purpose",
model="sonnet",
description="Map desire to market structure",
prompt="""You are the Desire Cartographer agent.
Read the agent definition at: agents/desire-cartographer/desire-cartographer.md
Read the desire taxonomy at: knowledge/desire-framework.md
## User Interview Data
- Desire category: {desire_category}
- Sub-category: {desire_subcategory}
- Target market: {target_market}
- Solo-dev preferred: {solo_dev_preferred}
- Industry preference: {industry_preference}
## Your Task
1. Map the desire to Level 1 → Level 2 → Level 3 nano-desires
2. Generate Korean + English search terms (15-25 keywords)
3. Identify desire intersections with other categories
4. Define 3-5 market segments
## Output
Use the Write tool to save your output as JSON to:
{output_dir}/artifacts/desire-map.json
Follow the exact JSON structure defined in your agent definition file."""
)
Task 2: Market Trend Researcher
Task(
subagent_type="general-purpose",
model="sonnet",
description="Research market size and trends",
prompt="""You are the Market Trend Researcher agent.
Read the agent definition at: agents/market-trend-researcher/market-trend-researcher.md
Read the research methodology at: knowledge/market-research-methods.md
## User Interview Data
- Desire category: {desire_category}
- Sub-category: {desire_subcategory}
- Target market: {target_market}
- Industry preference: {industry_preference}
## Your Task
1. Use WebSearch to find market size data (TAM/SAM/SOM)
2. If target_market == "Korea": prioritize 통계청 KOSIS, 중소벤처기업부
3. If target_market == "Global": use Statista, IBISWorld, CB Insights
4. Identify 3-5 major trends with evidence
5. Extract growth drivers and headwinds
If no direct data available, use proxy market technique (e.g., Japan market x 0.6 for Korea).
## Output
Use the Write tool to save your output as JSON to:
{output_dir}/artifacts/market-trends.json
Follow the exact JSON structure defined in your agent definition file."""
)
Wait for both to complete.
Validation:
Display Phase 1 summary:
욕망 동인: {top 3 core drivers from desire-map.json}
시장 규모: TAM {value from market-trends.json}
성장률: {CAGR}%
Display: "Phase 2: 경쟁사와 기회 빈틈을 분석합니다..."
Step 5.1: Competitive Scanner
Read desire-map.json to extract search_terms and market_segments for the prompt.
Task(
subagent_type="general-purpose",
model="sonnet",
description="Scan competitive landscape",
prompt="""You are the Competitive Scanner agent.
Read the agent definition at: agents/competitive-scanner/competitive-scanner.md
Read the analysis methodology at: knowledge/competitive-analysis-methods.md
## Context from Phase 1
- Desire: {desire_category} > {desire_subcategory}
- Target market: {target_market}
- Search terms (from desire-map.json): {paste search_terms}
- Market segments: {paste market_segments}
- Key players identified: {paste key_players from market-trends.json if available}
## Your Task
1. Use WebSearch with the provided search terms to find competitors
2. Analyze 5-10 competitors in depth, 10-20 total
3. For top 5: WebFetch pricing pages, extract SWOT
4. Build feature comparison matrix
5. Calculate pricing benchmarks
If target_market == "Korea": prioritize Naver/Daum search.
If no competitors found: set no_competition=true (blue ocean).
## Output
Use the Write tool to save your output as JSON to:
{output_dir}/artifacts/competitive-landscape.json
Follow the exact JSON structure defined in your agent definition file."""
)
Wait for completion. Read competitive-landscape.json.
Step 5.2: Gap Opportunity Analyzer
If competitive-landscape.json exists, launch gap analyzer:
Task(
subagent_type="general-purpose",
model="sonnet",
description="Identify market gaps and opportunities",
prompt="""You are the Gap Opportunity Analyzer agent.
Read the agent definition at: agents/gap-opportunity-analyzer/gap-opportunity-analyzer.md
Read the assessment framework at: knowledge/opportunity-assessment.md
## All Research Data
Read these artifact files:
- {output_dir}/artifacts/desire-map.json
- {output_dir}/artifacts/market-trends.json
- {output_dir}/artifacts/competitive-landscape.json
## User Context
- Solo-dev preferred: {solo_dev_preferred}
- Budget constraint: {budget_constraint}
- Target market: {target_market}
## Your Task
1. Cross-reference desires (from desire-map) with competitor offerings
2. Identify unmet needs, feature gaps, pricing gaps, segment gaps
3. Highlight desire intersection opportunities
4. Create 2-3 positioning recommendations with 2x2 map
If solo_dev_preferred == "Yes":
- Score each gap by solo-dev feasibility (1-10)
- Filter out team-required gaps (marketplaces requiring liquidity, heavy ops)
If budget_constraint == "Bootstrap":
- Prioritize organic growth opportunities
- Flag high-CAC gaps as "Not Recommended"
If no_competition == true (blue ocean):
- Add "Market Education Risk" assessment
- Suggest validation experiments
## Output
Use the Write tool to save your output as JSON to:
{output_dir}/artifacts/gap-analysis.json
Follow the exact JSON structure defined in your agent definition file."""
)
Wait for completion.
If competitive-scanner failed: skip gap analyzer, display warning.
Display Phase 2 summary:
경쟁사 분석: {count}개 기업
기회 영역: {count}개 발견
Top 기회: {top opportunity title} (feasibility: {score}/10)
Display: "Phase 3: 수익 모델을 설계합니다..."
Read gap-analysis.json to extract top opportunities for the prompt.
Task(
subagent_type="general-purpose",
model="sonnet",
description="Design revenue models",
prompt="""You are the Revenue Model Architect agent.
Read the agent definition at: agents/revenue-model-architect/revenue-model-architect.md
Read the feasibility criteria at: knowledge/opportunity-assessment.md (solo-dev section)
## All Research Data
Read these artifact files:
- {output_dir}/artifacts/desire-map.json
- {output_dir}/artifacts/market-trends.json
- {output_dir}/artifacts/competitive-landscape.json (if available)
- {output_dir}/artifacts/gap-analysis.json (if available)
## User Context
- Solo-dev preferred: {solo_dev_preferred}
- Budget constraint: {budget_constraint}
- Industry preference: {industry_preference}
## Your Task
1. Design 3-5 distinct revenue models
2. For each: calculate CAC, LTV, gross margin, churn assumptions
3. Create 3-year revenue projections (Y1, Y2, Y3)
4. Use WebSearch for pricing benchmarks in the identified market
5. Rank models and recommend the best one
If solo_dev_preferred == "Yes":
- Prioritize SaaS, info products, niche tools
- Score each model on solo-dev feasibility (1-10)
- Exclude high-ops models
If budget_constraint == "Bootstrap":
- Prioritize fast payback (CAC < 6 months)
- Emphasize organic growth channels
## Output
Use the Write tool to save your output as JSON to:
{output_dir}/artifacts/revenue-models.json
Follow the exact JSON structure defined in your agent definition file."""
)
Wait for completion.
Read all artifact JSON files and the 3 templates to produce final reports.
For each document:
templates/ as a structural guide7.1: market-analysis.md
templates/market-analysis.md for structureartifacts/desire-map.json + artifacts/market-trends.json{output_dir}/market-analysis.md7.2: competitive-analysis.md
templates/competitive-analysis.md for structureartifacts/competitive-landscape.json + artifacts/gap-analysis.json{output_dir}/competitive-analysis.md7.3: revenue-model-draft.md
templates/revenue-model-draft.md for structureartifacts/revenue-models.json{output_dir}/revenue-model-draft.mdIf any artifact is missing, write partial document with available data and mark incomplete sections.
Verify files exist:
ls -1 {output_dir}/*.md
Display final summary:
# 욕망 기반 시장조사 완료!
## 조사 개요
| 항목 | 값 |
|------|-----|
| 욕망 | {desire_category} > {desire_subcategory} |
| 시장 | {target_market} |
| TAM / SAM / SOM | {values from market-trends.json} |
| 경쟁사 | {count}개 분석 |
| 기회 영역 | {count}개 발견 |
| 추천 수익 모델 | {recommended model name} |
## 생성된 문서
- {output_dir}/market-analysis.md
- {output_dir}/competitive-analysis.md
- {output_dir}/revenue-model-draft.md
- {output_dir}/artifacts/ (JSON 원본 데이터)
## 다음 단계
1. 시장 분석 문서에서 TAM/SAM/SOM 검증
2. 경쟁사 분석에서 포지셔닝 빈틈 확인
3. 수익 모델 1개 선택 후 MVP 설계
4. 타겟 고객 10명과 인터뷰 진행
| Step | Error | Recovery | |------|-------|----------| | 0 | config.yaml missing | Use hardcoded defaults | | 0 | mkdir fails | Fallback to /tmp | | 1-3 | User provides no response | Exit gracefully | | 4 | desire-cartographer fails | Cannot proceed — exit | | 4 | market-trend-researcher fails | Continue with warning | | 5.1 | competitive-scanner finds 0 competitors | Mark as blue ocean, continue | | 5.2 | gap-analyzer fails | Use competitive data only | | 6 | revenue-model-architect fails | Provide partial results | | 7 | Template missing | Use basic markdown structure | | 7 | Artifact JSON missing/malformed | Mark sections as "데이터 없음" |
All 5 agents use general-purpose subagent with sonnet model. Each agent reads its definition from agents/ directory for role, output format, and strategy.
Cost: ~$1-2 per run (5 agents + orchestration) Duration: 12-18 minutes
Triggers:
Output: ~/.market-research-by-desire/projects/{slug}/
development
Design webhooks correctly on both sides — sending (HMAC signing, retries with backoff, at-least-once) and receiving (verify signature on raw body, enqueue + 200 fast, dedupe on event id). Use when adding webhook delivery or consuming a provider's webhooks. Not for internal service-to-service events (use async-messaging) or general outbound-call retry policy (use resilience-patterns).
testing
Use transactions and isolation levels correctly — keep them short, no network calls inside, explicit isolation, retry on serialization conflicts, and choose optimistic vs pessimistic locking. Use when a write spans multiple tables, when concurrent updates corrupt data, or when designing money/inventory flows. Not for cross-service event delivery (use async-messaging Outbox) or schema-level constraints (use schema-design).
development
Backend testing pyramid — unit for pure logic, integration against a real DB (Testcontainers), and consumer-driven contract testing (Pact) for service boundaries. Use before a feature, after a bug fix, or when services break each other on deploy. Not for load testing (use performance-profiling) or security testing (use backend-security-audit).
data-ai
Design a relational schema — normalize to 3NF then denormalize with justification, choose the right Postgres index type per data shape, enforce constraints at the DB. Use when modeling a new domain, when queries are slow, or before a migration. Not for diagnosing slow queries (use query-optimization) or shipping the change without downtime (use migration-strategy).