[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6X6FAFVXAF3DEV13ZX41BYA":3,"skill-same:01M6X6FAFVXAF3DEV13ZX41BYA":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":53,"linkOnly":54,"markdownContent":55,"markdownBody":56,"frontMatter":57,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":69,"repositoryHtmlUrl":70,"repositoryHomepageUrl":71,"ownerHtmlUrl":72,"ownerBlogUrl":71,"ownerDescription":73,"updatedAt":74,"install":75,"resources":87},"01M6X6FAFVXAF3DEV13ZX41BYA","customer-research",null,"Use when shaping a discovery slice — JTBD-framed interview guide, switch-event focus. Triggers on 'talk to users', 'why did they cancel', 'before we build X'.","event4u-app\u002Fagent-config","event4u-app","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F199339632?v=4","01M6X5TWBNCQCE1VDKT4E9KF7N","event4u.app","01M6X5TWF4HRM266RG2Q5VVH1X",19,"MIT","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fcustomer-research\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"customer","research","customer research","senior","when","slice","interview guide","event","professional","framed","false","focus","active","switch","jtbd","guide","interview","shaping","why","discovery","product","2026-11-10 10:12:30",false,"---\nmodel_tier: high\nname: customer-research\ndescription: \"Use when shaping a discovery slice — JTBD-framed interview guide, switch-event focus. Triggers on 'talk to users', 'why did they cancel', 'before we build X'.\"\nstatus: active\ntier: senior\ndomain: product\ncontext_spine: [product]\nworkspaces:\n  - product\npacks:\n  - product-discovery\ntrust:\n  level: professional\ninstall:\n  default: false\n  removable: true\n---\n\n# customer-research\n\n## When to use\n\n- A backlog item is fuzzy because no one has talked to a current user about the underlying job in the last quarter.\n- A churn or refund spike needs a switch-event explanation, not a feature gap list.\n- A product owner is about to write AC for a feature that has not been validated against a real user job.\n\nDo NOT use for quantitative funnel diagnosis (see `funnel-analysis`),\nRICE-style ranking (see `rice-prioritization`), or surveying at scale —\nthis skill is about depth-5-to-10 interviews, not statistics.\n\n## Cognition cluster\n\n- **Mental model 2 — Jobs-to-be-Done.** Frames every question against\n  the **switch event**: what caused the user to fire the previous\n  solution? See [`docs\u002Fcontracts\u002Fmental-models.md`](..\u002F..\u002F..\u002Fdocs\u002Fcontracts\u002Fmental-models.md) § 2.\n- **Mental model 3 — Pareto principle.** A research week that\n  produces 12 distinct insights is usually re-discovering the same\n  three. See `mental-models.md` § 3.\n\n## Procedure\n\n### Step 0: Frame the job\n\n1. Write one sentence: *\"Users hire \\\u003Cthing\\> to make progress in \\\u003Csituation\\>, when motivated by \\\u003Cpressure\\>, expecting \\\u003Coutcome\\>.\"* If you cannot finish the sentence, the discovery slice is not yet shaped — stop and route to `po-discovery`.\n2. Read the **product** slot of the [context-spine](..\u002F..\u002F..\u002Fdocs\u002Fcontracts\u002Fcontext-spine.md) (if the consumer project has filled it) for bounded scope, and the **team** slot for the senior PO \u002F researcher handoff target. Skip if absent — note in the brief.\n3. Identify **one** competing solution the user might fire. Multiple competitors per session blurs the switch event.\n\n### Step 1: Recruit the right 5–8\n\n1. Recruit **switchers** (joined in last 60 days) and **leavers**\n   (cancelled in last 60 days). Long-tenure power-users go in a\n   separate bucket — they explain habits, not jobs.\n2. 5 minimum, 8 maximum. Saturation hits around 6 in a tightly\n   scoped job — the Pareto cut. Beyond 8 is research theatre.\n3. Avoid friends, employees, beta-program over-talkers — selection bias is the failure mode that survives the AC.\n\n### Step 2: Run the interview\n\n1. Open with the **switch event**: *\"Walk me through the day you decided to start using \\\u003Cproduct\\>.\"* Time, place, trigger, alternative considered.\n2. Past behaviour, not hypothetical. Replace *\"would you use\"* with *\"the last time you needed X, what did you do?\"*.\n3. Capture **quotes**, not summaries. Verbatim quotes survive the AC; paraphrases get re-interpreted into pre-existing beliefs.\n4. Listen for the **anxiety \u002F habit** pair — what they feared in switching, what habit died.\n\n### Step 3: Code the evidence\n\n1. One quote per insight. Tag each with: switch-event, anxiety, habit, expected-outcome, unexpected-outcome.\n2. An insight without a quote is a hypothesis, not a finding — mark it.\n3. Frequency-rank by how many distinct interviewees touched the insight (≥ 3 is signal; 1 is anecdote).\n\n### Step 4: Hand back\n\n1. Produce the three artifacts (see `## Output`).\n2. Hand the brief to the senior PO. Do **not** translate findings into AC inside this skill — that is `refine-ticket`'s job.\n\n## Related Skills\n\n**WHEN to use this**\n\n- The unit of analysis is **a real user's switch event**.\n- Discovery is fuzzy and the team is about to ship without validation.\n- A retention or churn spike needs a narrative, not a metric.\n\n**WHEN NOT to use this**\n\n- Quantitative drop-off across stages — route to [`funnel-analysis`](..\u002Ffunnel-analysis\u002FSKILL.md).\n- Ranking competing initiatives — route to [`rice-prioritization`](..\u002Frice-prioritization\u002FSKILL.md).\n- Reframing a fuzzy product ask before any user contact — route to [`po-discovery`](..\u002Fpo-discovery\u002FSKILL.md).\n- AC sharpening on an already-validated ticket — route to [`refine-ticket`](..\u002Frefine-ticket\u002FSKILL.md).\n\n## When the agent should load this\n\n- \"We need to talk to users before we build X.\"\n- \"Why are people churning at month 2?\"\n- \"Run customer research on the new pricing tier.\"\n- \"I keep guessing what the user wants — let's actually ask.\"\n- \"Before refining this ticket, do we know the real job?\"\n\n## Output\n\n1. **`research-brief.md`** — frame sentence, recruit criteria, target sample, JTBD focal job, list of competing solutions in scope. Pre-interview artifact.\n2. **`evidence-log.md`** — one row per insight: quote · interviewee ID · tag (switch \u002F anxiety \u002F habit \u002F outcome) · frequency. Sorted by frequency descending. Verbatim only.\n3. **`switch-event-summary.md`** — narrative of the dominant switch event(s) the research surfaced, with ≥ 3 supporting quotes per claim. Hand-off artifact for [`refine-ticket`](..\u002Frefine-ticket\u002FSKILL.md) and the senior product owner persona (currently [`product-owner`](..\u002F..\u002Fpersonas\u002Fproduct-owner.md); senior persona shipping in next plate).\n\n## Gotcha\n\n- Asking *\"would you use\"* contaminates the answer with politeness; ground every question in past behaviour.\n- One articulate interviewee can swamp evidence-log. Frequency-rank by distinct people, not distinct quotes.\n- Tagging too aggressively pre-interview hides surprise findings — leave room for `unexpected-outcome`.\n- A research week without ≥ 3 disqualified hypotheses is suspect — research that confirms everything is research that asked nothing.\n\n## Do NOT\n\n- Do NOT translate findings into acceptance criteria inside this skill — hand off to `refine-ticket`.\n- Do NOT recruit only happy users; switchers and leavers carry the switch-event signal, satisfied users do not.\n- Do NOT skip the frame sentence. An unframed interview produces 50 quotes about 8 different jobs.\n\n## Runnable example\n\nPricing-tier churn at month 2:\n\n- Frame: *\"Customers hire \\\u003Cproduct\\> to make progress in \\\u003Cweekly reporting\\>, motivated by \\\u003Cboard cadence\\>, expecting \\\u003Cone-click roll-up\\>.\"*\n- Recruit: 6 leavers (cancelled within 30 days of month 2), 2 switchers from competitor C.\n- Interview: open with *\"Walk me through the day you decided to cancel.\"* Capture verbatim.\n- Output: `evidence-log.md` shows 5 of 8 cite the *manual export step* as the cancellation trigger — switch-event signal, ≥ 3 frequency. `switch-event-summary.md` recommends the senior PO scope a discovery slice on the export step, not the report itself.\n","# customer-research\n\n## When to use\n\n- A backlog item is fuzzy because no one has talked to a current user about the underlying job in the last quarter.\n- A churn or refund spike needs a switch-event explanation, not a feature gap list.\n- A product owner is about to write AC for a feature that has not been validated against a real user job.\n\nDo NOT use for quantitative funnel diagnosis (see `funnel-analysis`),\nRICE-style ranking (see `rice-prioritization`), or surveying at scale —\nthis skill is about depth-5-to-10 interviews, not statistics.\n\n## Cognition cluster\n\n- **Mental model 2 — Jobs-to-be-Done.** Frames every question against\n  the **switch event**: what caused the user to fire the previous\n  solution? See [`docs\u002Fcontracts\u002Fmental-models.md`](..\u002F..\u002F..\u002Fdocs\u002Fcontracts\u002Fmental-models.md) § 2.\n- **Mental model 3 — Pareto principle.** A research week that\n  produces 12 distinct insights is usually re-discovering the same\n  three. See `mental-models.md` § 3.\n\n## Procedure\n\n### Step 0: Frame the job\n\n1. Write one sentence: *\"Users hire \\\u003Cthing\\> to make progress in \\\u003Csituation\\>, when motivated by \\\u003Cpressure\\>, expecting \\\u003Coutcome\\>.\"* If you cannot finish the sentence, the discovery slice is not yet shaped — stop and route to `po-discovery`.\n2. Read the **product** slot of the [context-spine](..\u002F..\u002F..\u002Fdocs\u002Fcontracts\u002Fcontext-spine.md) (if the consumer project has filled it) for bounded scope, and the **team** slot for the senior PO \u002F researcher handoff target. Skip if absent — note in the brief.\n3. Identify **one** competing solution the user might fire. Multiple competitors per session blurs the switch event.\n\n### Step 1: Recruit the right 5–8\n\n1. Recruit **switchers** (joined in last 60 days) and **leavers**\n   (cancelled in last 60 days). Long-tenure power-users go in a\n   separate bucket — they explain habits, not jobs.\n2. 5 minimum, 8 maximum. Saturation hits around 6 in a tightly\n   scoped job — the Pareto cut. Beyond 8 is research theatre.\n3. Avoid friends, employees, beta-program over-talkers — selection bias is the failure mode that survives the AC.\n\n### Step 2: Run the interview\n\n1. Open with the **switch event**: *\"Walk me through the day you decided to start using \\\u003Cproduct\\>.\"* Time, place, trigger, alternative considered.\n2. Past behaviour, not hypothetical. Replace *\"would you use\"* with *\"the last time you needed X, what did you do?\"*.\n3. Capture **quotes**, not summaries. Verbatim quotes survive the AC; paraphrases get re-interpreted into pre-existing beliefs.\n4. Listen for the **anxiety \u002F habit** pair — what they feared in switching, what habit died.\n\n### Step 3: Code the evidence\n\n1. One quote per insight. Tag each with: switch-event, anxiety, habit, expected-outcome, unexpected-outcome.\n2. An insight without a quote is a hypothesis, not a finding — mark it.\n3. Frequency-rank by how many distinct interviewees touched the insight (≥ 3 is signal; 1 is anecdote).\n\n### Step 4: Hand back\n\n1. Produce the three artifacts (see `## Output`).\n2. Hand the brief to the senior PO. Do **not** translate findings into AC inside this skill — that is `refine-ticket`'s job.\n\n## Related Skills\n\n**WHEN to use this**\n\n- The unit of analysis is **a real user's switch event**.\n- Discovery is fuzzy and the team is about to ship without validation.\n- A retention or churn spike needs a narrative, not a metric.\n\n**WHEN NOT to use this**\n\n- Quantitative drop-off across stages — route to [`funnel-analysis`](..\u002Ffunnel-analysis\u002FSKILL.md).\n- Ranking competing initiatives — route to [`rice-prioritization`](..\u002Frice-prioritization\u002FSKILL.md).\n- Reframing a fuzzy product ask before any user contact — route to [`po-discovery`](..\u002Fpo-discovery\u002FSKILL.md).\n- AC sharpening on an already-validated ticket — route to [`refine-ticket`](..\u002Frefine-ticket\u002FSKILL.md).\n\n## When the agent should load this\n\n- \"We need to talk to users before we build X.\"\n- \"Why are people churning at month 2?\"\n- \"Run customer research on the new pricing tier.\"\n- \"I keep guessing what the user wants — let's actually ask.\"\n- \"Before refining this ticket, do we know the real job?\"\n\n## Output\n\n1. **`research-brief.md`** — frame sentence, recruit criteria, target sample, JTBD focal job, list of competing solutions in scope. Pre-interview artifact.\n2. **`evidence-log.md`** — one row per insight: quote · interviewee ID · tag (switch \u002F anxiety \u002F habit \u002F outcome) · frequency. Sorted by frequency descending. Verbatim only.\n3. **`switch-event-summary.md`** — narrative of the dominant switch event(s) the research surfaced, with ≥ 3 supporting quotes per claim. Hand-off artifact for [`refine-ticket`](..\u002Frefine-ticket\u002FSKILL.md) and the senior product owner persona (currently [`product-owner`](..\u002F..\u002Fpersonas\u002Fproduct-owner.md); senior persona shipping in next plate).\n\n## Gotcha\n\n- Asking *\"would you use\"* contaminates the answer with politeness; ground every question in past behaviour.\n- One articulate interviewee can swamp evidence-log. Frequency-rank by distinct people, not distinct quotes.\n- Tagging too aggressively pre-interview hides surprise findings — leave room for `unexpected-outcome`.\n- A research week without ≥ 3 disqualified hypotheses is suspect — research that confirms everything is research that asked nothing.\n\n## Do NOT\n\n- Do NOT translate findings into acceptance criteria inside this skill — hand off to `refine-ticket`.\n- Do NOT recruit only happy users; switchers and leavers carry the switch-event signal, satisfied users do not.\n- Do NOT skip the frame sentence. An unframed interview produces 50 quotes about 8 different jobs.\n\n## Runnable example\n\nPricing-tier churn at month 2:\n\n- Frame: *\"Customers hire \\\u003Cproduct\\> to make progress in \\\u003Cweekly reporting\\>, motivated by \\\u003Cboard cadence\\>, expecting \\\u003Cone-click roll-up\\>.\"*\n- Recruit: 6 leavers (cancelled within 30 days of month 2), 2 switchers from competitor C.\n- Interview: open with *\"Walk me through the day you decided to cancel.\"* Capture verbatim.\n- Output: `evidence-log.md` shows 5 of 8 cite the *manual export step* as the cancellation trigger — switch-event signal, ≥ 3 frequency. `switch-event-summary.md` recommends the senior PO scope a discovery slice on the export step, not the report itself.\n",{"name":5,"tier":35,"packs":58,"trust":60,"domain":52,"status":44,"install":61,"model_tier":63,"workspaces":64,"description":7,"context_spine":65},[59],"product-discovery",{"level":40},{"default":54,"removable":62},true,"high",[52],[52],"main","12bd765ce1d800501d45dfb8232102793af01290","src\u002Fskills\u002Fcustomer-research",1,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config","https:\u002F\u002Fevent4u.app","https:\u002F\u002Fgithub.com\u002Fevent4u-app","Your events in your hand","2026-11-11 06:19:40",{"source":8,"skillName":5,"commands":76,"prompt":86,"zipAvailable":62},[77,80,83],{"tool":78,"command":79},"npx","npx skills add event4u-app\u002Fagent-config --skill customer-research",{"tool":81,"command":82},"bunx","bunx skills add event4u-app\u002Fagent-config --skill customer-research",{"tool":84,"command":85},"pnpm","pnpm dlx skills add event4u-app\u002Fagent-config --skill customer-research","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fcustomer-research\u002FSKILL.md",[88],{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"evals\u002Ftriggers.json","REFERENCE","参考文档",929,"https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fcustomer-research\u002Fevals\u002Ftriggers.json",[95,109,122,133,145,155],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":53},"01M6X84PK96XBPENXH66JCTSD1","unknown-key-fixture","Declares a key the schema does not know.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Funknown-key\u002FSKILL.md",[101],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[103,104,105,106,107,108],"unknown key fixture","Unknown key","fixture","unknown","schema","package",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":116,"publishedAt":53},"01M6X84HW7NAHZ7GZMQ9RXK1XJ","portable-fixture","Declares only semantics the MCP-lite carrier transports whole.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Fportable\u002FSKILL.md",[115],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[105,117,118,119,120,108,121],"portable","portable fixture","engineer","only","MCP",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":53},"01M6X84F29FE0RGGZ1ZTFGZTX2","non-portable-fixture","Declares a runtime semantic the carrier drops.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Fbody-portable\u002Fnon-portable\u002FSKILL.md",[128],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[118,130,117,105,131,63,132,108],"non portable fixture","semantic","runtime",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":140,"publishedAt":53},"01M6X848F706PT9MDCX75JKJ6B","candidate-zero-width","A candidate whose prose carries an invisible joiner.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fzero-width-injection\u002FSKILL.md",[139],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[141,142,143,144],"candidate zero width","candidate","ZeRO","prose",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":53},"01M6X841SSC2T31VDF41SA6DG1","candidate-disclosure-suppression","A candidate whose prose tells the agent to withhold from the user.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fdisclosure-suppression\u002FSKILL.md",[151],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[153,142,144,154],"candidate disclosure suppression","user",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":162,"publishedAt":53},"01M6X83TFS5AGPBPVTQNWP0BB3","candidate-dangerous-frontmatter","A candidate claiming an unscoped tool grant and a permission bypass.","https:\u002F\u002Fgithub.com\u002Fevent4u-app\u002Fagent-config\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill-scout-candidates\u002Fdangerous-frontmatter\u002FSKILL.md",[161],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[163,142,164,165,166,167],"candidate dangerous frontmatter","frontmatter","shell","permission","tool"]