[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-knock-knock-product-messaging-strategy":3,"mdc--kb3y4-key":35,"related-repo-knock-knock-product-messaging-strategy":859,"related-org-knock-knock-product-messaging-strategy":952},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":26,"topics":30,"repo":31,"sourceUrl":33,"mdContent":34},"knock-product-messaging-strategy","design cross-channel product messaging systems","Design a cross-channel product messaging system that drives activation, engagement, and retention while controlling fatigue. Use when planning lifecycle messaging, auditing notification strategy, prioritizing workflows, or turning product moments into Knock workflows, guides, preferences, and measurement.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"knock","Knock","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fknock.png","knocklabs",[13,17,20,23],{"name":14,"slug":15,"type":16},"Engagement","engagement","tag",{"name":18,"slug":19,"type":16},"Product Management","product-management",{"name":21,"slug":22,"type":16},"Messaging","messaging",{"name":24,"slug":25,"type":16},"Strategy","strategy",0,"https:\u002F\u002Fgithub.com\u002Fknocklabs\u002Fskills","2026-07-27T06:28:49.935507",null,[],{"repoUrl":27,"stars":26,"forks":26,"topics":32,"description":29},[],"https:\u002F\u002Fgithub.com\u002Fknocklabs\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fknock-product-messaging-strategy","---\nname: knock-product-messaging-strategy\ndescription: Design a cross-channel product messaging system that drives activation, engagement, and retention while controlling fatigue. Use when planning lifecycle messaging, auditing notification strategy, prioritizing workflows, or turning product moments into Knock workflows, guides, preferences, and measurement.\n---\n\n# Product messaging strategy skill\n\nTurn a product into a coordinated messaging system — not a pile of one-off notifications. This skill operationalizes [The product leader's guide to effective messaging](https:\u002F\u002Fknock.app\u002Fmanuals\u002Fproduct-leaders-guide-to-effective-notifications\u002Fthe-product-leaders-guide-to-effective-notifications) into agent steps that produce Knock-ready plans and resources.\n\nComplementary manuals:\n\n- [In-app messaging best practices](https:\u002F\u002Fknock.app\u002Fmanuals\u002Fin-app-messaging\u002Fbest-practices-for-in-app-messaging)\n- [Transactional email](https:\u002F\u002Fknock.app\u002Fmanuals\u002Ftransactional-email)\n- [Notification infrastructure](https:\u002F\u002Fknock.app\u002Fmanuals\u002Fnotification-infrastructure)\n\n## Output contract (hard)\n\nWrite the full plan to **`knock-plan.md`** (repo root). Keep chat **minimal** — status + confirmation only. Follow `rules\u002Fknock-plan-file.md`.\n\nDo **not** paste full recommendation briefs, taxonomies, or checklists into chat. Rely on the plan file as the source of truth for context and for handoff to `knock-setup`.\n\n## Overview\n\nWork through these rule files in order when designing or auditing a messaging system. Put detailed findings in `knock-plan.md` as you go; do not narrate them in chat.\n\n1. **Data foundation and triggers** — meaningful product moments and event payloads\n2. **Recipients and ownership** — who should get the message and why\n3. **Delivery strategy** — channels, escalation, timing, stop conditions\n4. **Volume and batching** — frequency controls and digests\n5. **Relevance and preferences** — personalization and preference taxonomy\n6. **Measurement and review** — outcomes, fatigue signals, launch checklist\n7. **Apply in Knock** — map the plan to workflows, guides, audiences, and preferences\n\n## How to use this skill\n\n### Designing a messaging system for a product\n\n1. Learn the product (codebase, events, roles, lifecycle). Ask at most 3 clarifying questions if needed.\n2. Follow `rules\u002Fdata-foundation-and-triggers.md` to list meaningful moments and required event data — write them into `knock-plan.md`.\n3. For each high-value moment, complete recipient, delivery, volume, and preference decisions using the next rule files — update the plan file, not chat.\n4. Prioritize by growth outcome: activation, retention, revenue recovery, then nice-to-have alerts.\n5. Run every candidate through `rules\u002Fmeasurement-and-review.md` before marking build-ready in the plan.\n6. Use `rules\u002Fapply-in-knock.md` to enrich Knock shapes in the plan (or create resources only if the user explicitly asks). Prefer Knock MCP \u002F CLI when connected.\n7. In chat: one status line pointing at `knock-plan.md`, then ask which items to build. Confirmation question last, bolded.\n\n### Auditing an existing notification program\n\n1. Inventory current workflows, guides, channels, and preference categories into `knock-plan.md` (Audit section).\n2. Score each against the review checklist in `rules\u002Fmeasurement-and-review.md`.\n3. Flag missing stop conditions, broad recipient rules, channel spam, and preference gaps in the file.\n4. Chat: one status line + ask which Fix\u002FMerge\u002FKill items to act on next.\n\n### Handing off into setup or implementation\n\n- For greenfield Knock setup after strategy is approved, continue with `knock-setup`.\n- For copy and channel formatting, use `knock-notification-best-practices`.\n- For in-app guides UI, use `knock-in-app-ui`.\n- For local resource management, use `knock-cli`.\n\nWhen handing off to `knock-setup`, update **Setup handoff** in `knock-plan.md` and pass the same lists in chat (no re-ranking unless the user asks):\n\n```markdown\n### Setup handoff\n- **plan.** knock-plan.md\n- **confirmed.** [names or indexes]\n- **skipped.** [names or indexes]\n- **deferred \u002F blocked.** [names + reason]\n```\n\n`knock-setup` must treat `confirmed` as authoritative, read detail from `knock-plan.md`, and skip rediscovery.\n\n## Rule files reference\n\n- `rules\u002Fknock-plan-file.md` — plan file path, structure, and chat brevity rules\n- `rules\u002Fdata-foundation-and-triggers.md` — events, payloads, and moment types\n- `rules\u002Frecipients-and-ownership.md` — recipient selection and escalation\n- `rules\u002Fdelivery-strategy.md` — channel progression and timing\n- `rules\u002Fvolume-and-batching.md` — frequency, cooldowns, digests\n- `rules\u002Frelevance-and-preferences.md` — context, personalization, prefs\n- `rules\u002Fmeasurement-and-review.md` — outcomes, fatigue, launch standard\n- `rules\u002Fapply-in-knock.md` — map decisions onto Knock primitives\n\n## Quick reference\n\n### Four moment types\n\n1. **User-requested outcomes** — export done, payment submitted (usually immediate)\n2. **Collaborative activity** — mention, assignment, approval (immediate or batched)\n3. **Product or account state changes** — integration down, usage limit, payment failed\n4. **Time-based conditions** — trial ending, incomplete onboarding, overdue approval\n\n### Non-negotiables before building\n\n- Trigger represents a meaningful state change, not a vague inactivity heuristic alone\n- Recipient is the person responsible for the next action\n- Primary channel + escalation path defined\n- Stop \u002F cancel condition defined and re-checked after delays\n- Preference category assigned (or explicitly marked transactional\u002Fservice-critical)\n- Success metric is a product outcome, not only an open rate\n\n### Growth priority order\n\n1. Activation \u002F time-to-value\n2. Core loop engagement (collaboration, habit)\n3. Revenue protection (failed payment, trial, limits)\n4. Re-engagement \u002F win-back with precise state\n5. Announcements and education (lowest interrupt)\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,49,66,71,106,113,146,165,171,183,257,263,270,345,351,387,393,443,469,607,632,638,725,731,737,780,786,819,825,853],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"product-messaging-strategy-skill",[46],{"type":47,"value":48},"text","Product messaging strategy skill",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53,55,64],{"type":47,"value":54},"Turn a product into a coordinated messaging system — not a pile of one-off notifications. This skill operationalizes ",{"type":41,"tag":56,"props":57,"children":61},"a",{"href":58,"rel":59},"https:\u002F\u002Fknock.app\u002Fmanuals\u002Fproduct-leaders-guide-to-effective-notifications\u002Fthe-product-leaders-guide-to-effective-notifications",[60],"nofollow",[62],{"type":47,"value":63},"The product leader's guide to effective messaging",{"type":47,"value":65}," into agent steps that produce Knock-ready plans and resources.",{"type":41,"tag":50,"props":67,"children":68},{},[69],{"type":47,"value":70},"Complementary manuals:",{"type":41,"tag":72,"props":73,"children":74},"ul",{},[75,86,96],{"type":41,"tag":76,"props":77,"children":78},"li",{},[79],{"type":41,"tag":56,"props":80,"children":83},{"href":81,"rel":82},"https:\u002F\u002Fknock.app\u002Fmanuals\u002Fin-app-messaging\u002Fbest-practices-for-in-app-messaging",[60],[84],{"type":47,"value":85},"In-app messaging best practices",{"type":41,"tag":76,"props":87,"children":88},{},[89],{"type":41,"tag":56,"props":90,"children":93},{"href":91,"rel":92},"https:\u002F\u002Fknock.app\u002Fmanuals\u002Ftransactional-email",[60],[94],{"type":47,"value":95},"Transactional email",{"type":41,"tag":76,"props":97,"children":98},{},[99],{"type":41,"tag":56,"props":100,"children":103},{"href":101,"rel":102},"https:\u002F\u002Fknock.app\u002Fmanuals\u002Fnotification-infrastructure",[60],[104],{"type":47,"value":105},"Notification infrastructure",{"type":41,"tag":107,"props":108,"children":110},"h2",{"id":109},"output-contract-hard",[111],{"type":47,"value":112},"Output contract (hard)",{"type":41,"tag":50,"props":114,"children":115},{},[116,118,129,131,136,138,144],{"type":47,"value":117},"Write the full plan to ",{"type":41,"tag":119,"props":120,"children":121},"strong",{},[122],{"type":41,"tag":123,"props":124,"children":126},"code",{"className":125},[],[127],{"type":47,"value":128},"knock-plan.md",{"type":47,"value":130}," (repo root). Keep chat ",{"type":41,"tag":119,"props":132,"children":133},{},[134],{"type":47,"value":135},"minimal",{"type":47,"value":137}," — status + confirmation only. Follow ",{"type":41,"tag":123,"props":139,"children":141},{"className":140},[],[142],{"type":47,"value":143},"rules\u002Fknock-plan-file.md",{"type":47,"value":145},".",{"type":41,"tag":50,"props":147,"children":148},{},[149,151,156,158,164],{"type":47,"value":150},"Do ",{"type":41,"tag":119,"props":152,"children":153},{},[154],{"type":47,"value":155},"not",{"type":47,"value":157}," paste full recommendation briefs, taxonomies, or checklists into chat. Rely on the plan file as the source of truth for context and for handoff to ",{"type":41,"tag":123,"props":159,"children":161},{"className":160},[],[162],{"type":47,"value":163},"knock-setup",{"type":47,"value":145},{"type":41,"tag":107,"props":166,"children":168},{"id":167},"overview",[169],{"type":47,"value":170},"Overview",{"type":41,"tag":50,"props":172,"children":173},{},[174,176,181],{"type":47,"value":175},"Work through these rule files in order when designing or auditing a messaging system. Put detailed findings in ",{"type":41,"tag":123,"props":177,"children":179},{"className":178},[],[180],{"type":47,"value":128},{"type":47,"value":182}," as you go; do not narrate them in chat.",{"type":41,"tag":184,"props":185,"children":186},"ol",{},[187,197,207,217,227,237,247],{"type":41,"tag":76,"props":188,"children":189},{},[190,195],{"type":41,"tag":119,"props":191,"children":192},{},[193],{"type":47,"value":194},"Data foundation and triggers",{"type":47,"value":196}," — meaningful product moments and event payloads",{"type":41,"tag":76,"props":198,"children":199},{},[200,205],{"type":41,"tag":119,"props":201,"children":202},{},[203],{"type":47,"value":204},"Recipients and ownership",{"type":47,"value":206}," — who should get the message and why",{"type":41,"tag":76,"props":208,"children":209},{},[210,215],{"type":41,"tag":119,"props":211,"children":212},{},[213],{"type":47,"value":214},"Delivery strategy",{"type":47,"value":216}," — channels, escalation, timing, stop conditions",{"type":41,"tag":76,"props":218,"children":219},{},[220,225],{"type":41,"tag":119,"props":221,"children":222},{},[223],{"type":47,"value":224},"Volume and batching",{"type":47,"value":226}," — frequency controls and digests",{"type":41,"tag":76,"props":228,"children":229},{},[230,235],{"type":41,"tag":119,"props":231,"children":232},{},[233],{"type":47,"value":234},"Relevance and preferences",{"type":47,"value":236}," — personalization and preference taxonomy",{"type":41,"tag":76,"props":238,"children":239},{},[240,245],{"type":41,"tag":119,"props":241,"children":242},{},[243],{"type":47,"value":244},"Measurement and review",{"type":47,"value":246}," — outcomes, fatigue signals, launch checklist",{"type":41,"tag":76,"props":248,"children":249},{},[250,255],{"type":41,"tag":119,"props":251,"children":252},{},[253],{"type":47,"value":254},"Apply in Knock",{"type":47,"value":256}," — map the plan to workflows, guides, audiences, and preferences",{"type":41,"tag":107,"props":258,"children":260},{"id":259},"how-to-use-this-skill",[261],{"type":47,"value":262},"How to use this skill",{"type":41,"tag":264,"props":265,"children":267},"h3",{"id":266},"designing-a-messaging-system-for-a-product",[268],{"type":47,"value":269},"Designing a messaging system for a product",{"type":41,"tag":184,"props":271,"children":272},{},[273,278,297,302,307,320,333],{"type":41,"tag":76,"props":274,"children":275},{},[276],{"type":47,"value":277},"Learn the product (codebase, events, roles, lifecycle). Ask at most 3 clarifying questions if needed.",{"type":41,"tag":76,"props":279,"children":280},{},[281,283,289,291,296],{"type":47,"value":282},"Follow ",{"type":41,"tag":123,"props":284,"children":286},{"className":285},[],[287],{"type":47,"value":288},"rules\u002Fdata-foundation-and-triggers.md",{"type":47,"value":290}," to list meaningful moments and required event data — write them into ",{"type":41,"tag":123,"props":292,"children":294},{"className":293},[],[295],{"type":47,"value":128},{"type":47,"value":145},{"type":41,"tag":76,"props":298,"children":299},{},[300],{"type":47,"value":301},"For each high-value moment, complete recipient, delivery, volume, and preference decisions using the next rule files — update the plan file, not chat.",{"type":41,"tag":76,"props":303,"children":304},{},[305],{"type":47,"value":306},"Prioritize by growth outcome: activation, retention, revenue recovery, then nice-to-have alerts.",{"type":41,"tag":76,"props":308,"children":309},{},[310,312,318],{"type":47,"value":311},"Run every candidate through ",{"type":41,"tag":123,"props":313,"children":315},{"className":314},[],[316],{"type":47,"value":317},"rules\u002Fmeasurement-and-review.md",{"type":47,"value":319}," before marking build-ready in the plan.",{"type":41,"tag":76,"props":321,"children":322},{},[323,325,331],{"type":47,"value":324},"Use ",{"type":41,"tag":123,"props":326,"children":328},{"className":327},[],[329],{"type":47,"value":330},"rules\u002Fapply-in-knock.md",{"type":47,"value":332}," to enrich Knock shapes in the plan (or create resources only if the user explicitly asks). Prefer Knock MCP \u002F CLI when connected.",{"type":41,"tag":76,"props":334,"children":335},{},[336,338,343],{"type":47,"value":337},"In chat: one status line pointing at ",{"type":41,"tag":123,"props":339,"children":341},{"className":340},[],[342],{"type":47,"value":128},{"type":47,"value":344},", then ask which items to build. Confirmation question last, bolded.",{"type":41,"tag":264,"props":346,"children":348},{"id":347},"auditing-an-existing-notification-program",[349],{"type":47,"value":350},"Auditing an existing notification program",{"type":41,"tag":184,"props":352,"children":353},{},[354,366,377,382],{"type":41,"tag":76,"props":355,"children":356},{},[357,359,364],{"type":47,"value":358},"Inventory current workflows, guides, channels, and preference categories into ",{"type":41,"tag":123,"props":360,"children":362},{"className":361},[],[363],{"type":47,"value":128},{"type":47,"value":365}," (Audit section).",{"type":41,"tag":76,"props":367,"children":368},{},[369,371,376],{"type":47,"value":370},"Score each against the review checklist in ",{"type":41,"tag":123,"props":372,"children":374},{"className":373},[],[375],{"type":47,"value":317},{"type":47,"value":145},{"type":41,"tag":76,"props":378,"children":379},{},[380],{"type":47,"value":381},"Flag missing stop conditions, broad recipient rules, channel spam, and preference gaps in the file.",{"type":41,"tag":76,"props":383,"children":384},{},[385],{"type":47,"value":386},"Chat: one status line + ask which Fix\u002FMerge\u002FKill items to act on next.",{"type":41,"tag":264,"props":388,"children":390},{"id":389},"handing-off-into-setup-or-implementation",[391],{"type":47,"value":392},"Handing off into setup or implementation",{"type":41,"tag":72,"props":394,"children":395},{},[396,407,419,431],{"type":41,"tag":76,"props":397,"children":398},{},[399,401,406],{"type":47,"value":400},"For greenfield Knock setup after strategy is approved, continue with ",{"type":41,"tag":123,"props":402,"children":404},{"className":403},[],[405],{"type":47,"value":163},{"type":47,"value":145},{"type":41,"tag":76,"props":408,"children":409},{},[410,412,418],{"type":47,"value":411},"For copy and channel formatting, use ",{"type":41,"tag":123,"props":413,"children":415},{"className":414},[],[416],{"type":47,"value":417},"knock-notification-best-practices",{"type":47,"value":145},{"type":41,"tag":76,"props":420,"children":421},{},[422,424,430],{"type":47,"value":423},"For in-app guides UI, use ",{"type":41,"tag":123,"props":425,"children":427},{"className":426},[],[428],{"type":47,"value":429},"knock-in-app-ui",{"type":47,"value":145},{"type":41,"tag":76,"props":432,"children":433},{},[434,436,442],{"type":47,"value":435},"For local resource management, use ",{"type":41,"tag":123,"props":437,"children":439},{"className":438},[],[440],{"type":47,"value":441},"knock-cli",{"type":47,"value":145},{"type":41,"tag":50,"props":444,"children":445},{},[446,448,453,455,460,462,467],{"type":47,"value":447},"When handing off to ",{"type":41,"tag":123,"props":449,"children":451},{"className":450},[],[452],{"type":47,"value":163},{"type":47,"value":454},", update ",{"type":41,"tag":119,"props":456,"children":457},{},[458],{"type":47,"value":459},"Setup handoff",{"type":47,"value":461}," in ",{"type":41,"tag":123,"props":463,"children":465},{"className":464},[],[466],{"type":47,"value":128},{"type":47,"value":468}," and pass the same lists in chat (no re-ranking unless the user asks):",{"type":41,"tag":470,"props":471,"children":476},"pre",{"className":472,"code":473,"language":474,"meta":475,"style":475},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","### Setup handoff\n- **plan.** knock-plan.md\n- **confirmed.** [names or indexes]\n- **skipped.** [names or indexes]\n- **deferred \u002F blocked.** [names + reason]\n","markdown","",[477],{"type":41,"tag":123,"props":478,"children":479},{"__ignoreMap":475},[480,498,530,556,581],{"type":41,"tag":481,"props":482,"children":485},"span",{"class":483,"line":484},"line",1,[486,492],{"type":41,"tag":481,"props":487,"children":489},{"style":488},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[490],{"type":47,"value":491},"### ",{"type":41,"tag":481,"props":493,"children":495},{"style":494},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[496],{"type":47,"value":497},"Setup handoff\n",{"type":41,"tag":481,"props":499,"children":501},{"class":483,"line":500},2,[502,507,513,519,524],{"type":41,"tag":481,"props":503,"children":504},{"style":488},[505],{"type":47,"value":506},"-",{"type":41,"tag":481,"props":508,"children":510},{"style":509},"--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold",[511],{"type":47,"value":512}," **",{"type":41,"tag":481,"props":514,"children":516},{"style":515},"--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[517],{"type":47,"value":518},"plan.",{"type":41,"tag":481,"props":520,"children":521},{"style":509},[522],{"type":47,"value":523},"**",{"type":41,"tag":481,"props":525,"children":527},{"style":526},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[528],{"type":47,"value":529}," knock-plan.md\n",{"type":41,"tag":481,"props":531,"children":533},{"class":483,"line":532},3,[534,538,542,547,551],{"type":41,"tag":481,"props":535,"children":536},{"style":488},[537],{"type":47,"value":506},{"type":41,"tag":481,"props":539,"children":540},{"style":509},[541],{"type":47,"value":512},{"type":41,"tag":481,"props":543,"children":544},{"style":515},[545],{"type":47,"value":546},"confirmed.",{"type":41,"tag":481,"props":548,"children":549},{"style":509},[550],{"type":47,"value":523},{"type":41,"tag":481,"props":552,"children":553},{"style":526},[554],{"type":47,"value":555}," [names or indexes]\n",{"type":41,"tag":481,"props":557,"children":559},{"class":483,"line":558},4,[560,564,568,573,577],{"type":41,"tag":481,"props":561,"children":562},{"style":488},[563],{"type":47,"value":506},{"type":41,"tag":481,"props":565,"children":566},{"style":509},[567],{"type":47,"value":512},{"type":41,"tag":481,"props":569,"children":570},{"style":515},[571],{"type":47,"value":572},"skipped.",{"type":41,"tag":481,"props":574,"children":575},{"style":509},[576],{"type":47,"value":523},{"type":41,"tag":481,"props":578,"children":579},{"style":526},[580],{"type":47,"value":555},{"type":41,"tag":481,"props":582,"children":584},{"class":483,"line":583},5,[585,589,593,598,602],{"type":41,"tag":481,"props":586,"children":587},{"style":488},[588],{"type":47,"value":506},{"type":41,"tag":481,"props":590,"children":591},{"style":509},[592],{"type":47,"value":512},{"type":41,"tag":481,"props":594,"children":595},{"style":515},[596],{"type":47,"value":597},"deferred \u002F blocked.",{"type":41,"tag":481,"props":599,"children":600},{"style":509},[601],{"type":47,"value":523},{"type":41,"tag":481,"props":603,"children":604},{"style":526},[605],{"type":47,"value":606}," [names + reason]\n",{"type":41,"tag":50,"props":608,"children":609},{},[610,615,617,623,625,630],{"type":41,"tag":123,"props":611,"children":613},{"className":612},[],[614],{"type":47,"value":163},{"type":47,"value":616}," must treat ",{"type":41,"tag":123,"props":618,"children":620},{"className":619},[],[621],{"type":47,"value":622},"confirmed",{"type":47,"value":624}," as authoritative, read detail from ",{"type":41,"tag":123,"props":626,"children":628},{"className":627},[],[629],{"type":47,"value":128},{"type":47,"value":631},", and skip rediscovery.",{"type":41,"tag":107,"props":633,"children":635},{"id":634},"rule-files-reference",[636],{"type":47,"value":637},"Rule files reference",{"type":41,"tag":72,"props":639,"children":640},{},[641,651,661,672,683,694,705,715],{"type":41,"tag":76,"props":642,"children":643},{},[644,649],{"type":41,"tag":123,"props":645,"children":647},{"className":646},[],[648],{"type":47,"value":143},{"type":47,"value":650}," — plan file path, structure, and chat brevity rules",{"type":41,"tag":76,"props":652,"children":653},{},[654,659],{"type":41,"tag":123,"props":655,"children":657},{"className":656},[],[658],{"type":47,"value":288},{"type":47,"value":660}," — events, payloads, and moment types",{"type":41,"tag":76,"props":662,"children":663},{},[664,670],{"type":41,"tag":123,"props":665,"children":667},{"className":666},[],[668],{"type":47,"value":669},"rules\u002Frecipients-and-ownership.md",{"type":47,"value":671}," — recipient selection and escalation",{"type":41,"tag":76,"props":673,"children":674},{},[675,681],{"type":41,"tag":123,"props":676,"children":678},{"className":677},[],[679],{"type":47,"value":680},"rules\u002Fdelivery-strategy.md",{"type":47,"value":682}," — channel progression and timing",{"type":41,"tag":76,"props":684,"children":685},{},[686,692],{"type":41,"tag":123,"props":687,"children":689},{"className":688},[],[690],{"type":47,"value":691},"rules\u002Fvolume-and-batching.md",{"type":47,"value":693}," — frequency, cooldowns, digests",{"type":41,"tag":76,"props":695,"children":696},{},[697,703],{"type":41,"tag":123,"props":698,"children":700},{"className":699},[],[701],{"type":47,"value":702},"rules\u002Frelevance-and-preferences.md",{"type":47,"value":704}," — context, personalization, prefs",{"type":41,"tag":76,"props":706,"children":707},{},[708,713],{"type":41,"tag":123,"props":709,"children":711},{"className":710},[],[712],{"type":47,"value":317},{"type":47,"value":714}," — outcomes, fatigue, launch standard",{"type":41,"tag":76,"props":716,"children":717},{},[718,723],{"type":41,"tag":123,"props":719,"children":721},{"className":720},[],[722],{"type":47,"value":330},{"type":47,"value":724}," — map decisions onto Knock primitives",{"type":41,"tag":107,"props":726,"children":728},{"id":727},"quick-reference",[729],{"type":47,"value":730},"Quick reference",{"type":41,"tag":264,"props":732,"children":734},{"id":733},"four-moment-types",[735],{"type":47,"value":736},"Four moment types",{"type":41,"tag":184,"props":738,"children":739},{},[740,750,760,770],{"type":41,"tag":76,"props":741,"children":742},{},[743,748],{"type":41,"tag":119,"props":744,"children":745},{},[746],{"type":47,"value":747},"User-requested outcomes",{"type":47,"value":749}," — export done, payment submitted (usually immediate)",{"type":41,"tag":76,"props":751,"children":752},{},[753,758],{"type":41,"tag":119,"props":754,"children":755},{},[756],{"type":47,"value":757},"Collaborative activity",{"type":47,"value":759}," — mention, assignment, approval (immediate or batched)",{"type":41,"tag":76,"props":761,"children":762},{},[763,768],{"type":41,"tag":119,"props":764,"children":765},{},[766],{"type":47,"value":767},"Product or account state changes",{"type":47,"value":769}," — integration down, usage limit, payment failed",{"type":41,"tag":76,"props":771,"children":772},{},[773,778],{"type":41,"tag":119,"props":774,"children":775},{},[776],{"type":47,"value":777},"Time-based conditions",{"type":47,"value":779}," — trial ending, incomplete onboarding, overdue approval",{"type":41,"tag":264,"props":781,"children":783},{"id":782},"non-negotiables-before-building",[784],{"type":47,"value":785},"Non-negotiables before building",{"type":41,"tag":72,"props":787,"children":788},{},[789,794,799,804,809,814],{"type":41,"tag":76,"props":790,"children":791},{},[792],{"type":47,"value":793},"Trigger represents a meaningful state change, not a vague inactivity heuristic alone",{"type":41,"tag":76,"props":795,"children":796},{},[797],{"type":47,"value":798},"Recipient is the person responsible for the next action",{"type":41,"tag":76,"props":800,"children":801},{},[802],{"type":47,"value":803},"Primary channel + escalation path defined",{"type":41,"tag":76,"props":805,"children":806},{},[807],{"type":47,"value":808},"Stop \u002F cancel condition defined and re-checked after delays",{"type":41,"tag":76,"props":810,"children":811},{},[812],{"type":47,"value":813},"Preference category assigned (or explicitly marked transactional\u002Fservice-critical)",{"type":41,"tag":76,"props":815,"children":816},{},[817],{"type":47,"value":818},"Success metric is a product outcome, not only an open rate",{"type":41,"tag":264,"props":820,"children":822},{"id":821},"growth-priority-order",[823],{"type":47,"value":824},"Growth priority order",{"type":41,"tag":184,"props":826,"children":827},{},[828,833,838,843,848],{"type":41,"tag":76,"props":829,"children":830},{},[831],{"type":47,"value":832},"Activation \u002F time-to-value",{"type":41,"tag":76,"props":834,"children":835},{},[836],{"type":47,"value":837},"Core loop engagement (collaboration, habit)",{"type":41,"tag":76,"props":839,"children":840},{},[841],{"type":47,"value":842},"Revenue protection (failed payment, trial, limits)",{"type":41,"tag":76,"props":844,"children":845},{},[846],{"type":47,"value":847},"Re-engagement \u002F win-back with precise state",{"type":41,"tag":76,"props":849,"children":850},{},[851],{"type":47,"value":852},"Announcements and education (lowest interrupt)",{"type":41,"tag":854,"props":855,"children":856},"style",{},[857],{"type":47,"value":858},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":860,"total":951},[861,874,890,903,918,931,938],{"slug":441,"name":441,"fn":862,"description":863,"org":864,"tags":865,"stars":26,"repoUrl":27,"updatedAt":873},"manage Knock notification resources via CLI","Guidelines for working with the Knock CLI to manage workflows, templates, and other notification resources in a Knock project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[866,869,870],{"name":867,"slug":868,"type":16},"CLI","cli",{"name":21,"slug":22,"type":16},{"name":871,"slug":872,"type":16},"Notifications","notifications","2026-07-14T05:23:51.065051",{"slug":429,"name":429,"fn":875,"description":876,"org":877,"tags":878,"stars":26,"repoUrl":27,"updatedAt":889},"implement Knock in-app UI in React","Guidance for implementing Knock in-app UI in a web app, with a focus on setting up, rendering, and debugging Knock guides in React.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[879,882,883,886],{"name":880,"slug":881,"type":16},"Frontend","frontend",{"name":21,"slug":22,"type":16},{"name":884,"slug":885,"type":16},"React","react",{"name":887,"slug":888,"type":16},"UI Components","ui-components","2026-07-14T05:23:53.566839",{"slug":891,"name":891,"fn":892,"description":893,"org":894,"tags":895,"stars":26,"repoUrl":27,"updatedAt":902},"knock-lifecycle-opportunities","identify lifecycle messaging opportunities","Scan a product codebase for activation, engagement, and retention moments and recommend lifecycle messaging opportunities. Use when finding onboarding, churn, trial, or habit-forming notification candidates without creating Knock resources.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[896,897,900,901],{"name":14,"slug":15,"type":16},{"name":898,"slug":899,"type":16},"Marketing","marketing",{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},"2026-07-27T06:28:50.28638",{"slug":904,"name":904,"fn":905,"description":906,"org":907,"tags":908,"stars":26,"repoUrl":27,"updatedAt":917},"knock-migrate-to-knock","migrate messaging infrastructure to Knock","Investigate existing messaging infrastructure in a codebase and recommend how it maps to Knock. Use when migrating from Braze, Courier, Customer.io, Iterable, SendGrid, or custom notification code, or when planning a move to Knock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[909,912,913,916],{"name":910,"slug":911,"type":16},"Infrastructure","infrastructure",{"name":21,"slug":22,"type":16},{"name":914,"slug":915,"type":16},"Migration","migration",{"name":871,"slug":872,"type":16},"2026-07-27T06:28:49.594684",{"slug":417,"name":417,"fn":919,"description":920,"org":921,"tags":922,"stars":26,"repoUrl":27,"updatedAt":930},"design effective notification systems","Comprehensive guidelines for designing, writing, and implementing effective notification systems across email, push, SMS, in-app, and chat channels.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[923,926,929],{"name":924,"slug":925,"type":16},"Best Practices","best-practices",{"name":927,"slug":928,"type":16},"Communications","communications",{"name":21,"slug":22,"type":16},"2026-07-14T05:23:54.812153",{"slug":4,"name":4,"fn":5,"description":6,"org":932,"tags":933,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[934,935,936,937],{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"slug":163,"name":163,"fn":939,"description":940,"org":941,"tags":942,"stars":26,"repoUrl":27,"updatedAt":950},"integrate Knock notification workflows","Connect Knock to your coding agent, discover and build notification workflows, and recommend how to trigger them from your application.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[943,946,949],{"name":944,"slug":945,"type":16},"API Development","api-development",{"name":947,"slug":948,"type":16},"Automation","automation",{"name":21,"slug":22,"type":16},"2026-07-27T06:06:35.280117",7,{"items":953,"total":951},[954,960,967,974,981,987,994],{"slug":441,"name":441,"fn":862,"description":863,"org":955,"tags":956,"stars":26,"repoUrl":27,"updatedAt":873},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[957,958,959],{"name":867,"slug":868,"type":16},{"name":21,"slug":22,"type":16},{"name":871,"slug":872,"type":16},{"slug":429,"name":429,"fn":875,"description":876,"org":961,"tags":962,"stars":26,"repoUrl":27,"updatedAt":889},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[963,964,965,966],{"name":880,"slug":881,"type":16},{"name":21,"slug":22,"type":16},{"name":884,"slug":885,"type":16},{"name":887,"slug":888,"type":16},{"slug":891,"name":891,"fn":892,"description":893,"org":968,"tags":969,"stars":26,"repoUrl":27,"updatedAt":902},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[970,971,972,973],{"name":14,"slug":15,"type":16},{"name":898,"slug":899,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"slug":904,"name":904,"fn":905,"description":906,"org":975,"tags":976,"stars":26,"repoUrl":27,"updatedAt":917},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[977,978,979,980],{"name":910,"slug":911,"type":16},{"name":21,"slug":22,"type":16},{"name":914,"slug":915,"type":16},{"name":871,"slug":872,"type":16},{"slug":417,"name":417,"fn":919,"description":920,"org":982,"tags":983,"stars":26,"repoUrl":27,"updatedAt":930},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[984,985,986],{"name":924,"slug":925,"type":16},{"name":927,"slug":928,"type":16},{"name":21,"slug":22,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":988,"tags":989,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[990,991,992,993],{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"slug":163,"name":163,"fn":939,"description":940,"org":995,"tags":996,"stars":26,"repoUrl":27,"updatedAt":950},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[997,998,999],{"name":944,"slug":945,"type":16},{"name":947,"slug":948,"type":16},{"name":21,"slug":22,"type":16}]