[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-knock-knock-setup":3,"mdc-wmo2qn-key":32,"related-org-knock-knock-setup":477,"related-repo-knock-knock-setup":573},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":23,"topics":27,"repo":28,"sourceUrl":30,"mdContent":31},"knock-setup","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},"knock","Knock","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fknock.png","knocklabs",[13,17,20],{"name":14,"slug":15,"type":16},"Automation","automation","tag",{"name":18,"slug":19,"type":16},"Messaging","messaging",{"name":21,"slug":22,"type":16},"API Development","api-development",0,"https:\u002F\u002Fgithub.com\u002Fknocklabs\u002Fskills","2026-07-27T06:06:35.280117",null,[],{"repoUrl":24,"stars":23,"forks":23,"topics":29,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fknocklabs\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fknock-setup","---\nname: knock-setup\ndescription: Connect Knock to your coding agent, discover and build notification workflows, and recommend how to trigger them from your application.\n---\n\n# Setup\n\nEnd-to-end Knock setup for a coding agent: connect tooling, design and build notification workflows, then wire them into the application. Work through the rules below in order.\n\nWhile working, keep every response to one short line — no summaries, no menus, no extra questions unless a step fails. The only exceptions are the workflow proposals, a prior-confirmation restatement (2–3 lines max), the implementation confirmation ask, the import-users id ask, and the final wrap-up output, which have their own formats. When you end with a confirmation question (workflows, implementation, import-users id, or wrap-up guides ask), that question must be the very last line of the message, on its own, and bolded.\n\nAssume the user already has a Knock account when this skill is invoked from the Knock dashboard. Otherwise, ask once whether they have an account; if not, point them to https:\u002F\u002Fdashboard.knock.app\u002F to sign up, then continue.\n\n## How to use this skill\n\n1. **Connect MCP for the current tool**\n   - Cursor → `rules\u002Fconnect-mcp-cursor.md`\n   - Codex → `rules\u002Fconnect-mcp-codex.md`\n   - Claude Code → `rules\u002Fconnect-mcp-claude-code.md`\n   - If the tool is unknown, ask which one, then follow the matching rule.\n\n2. **Discover workflows** (`rules\u002Fdiscover-workflows.md`)\n   - If this conversation already has an approved build list from `knock-lifecycle-opportunities` or `knock-product-messaging-strategy`, skip rediscovery (see prior-confirmation gate in that rule).\n   - Otherwise learn the product, propose high-value workflows, and confirm which to build.\n\n3. **Build workflows** (`rules\u002Fbuild-workflows.md`)\n   - Create confirmed workflows in the Knock development environment via MCP.\n\n4. **Recommend an implementation approach** (`rules\u002Frecommend-implementation.md`)\n   - Pick one trigger path, ask the user to confirm, then create branch `knock-implementation` before file changes.\n   - For a Knock Data Source (CDP or custom HTTP), follow `rules\u002Fimplement-data-source.md`.\n\n5. **Wrap up** (`rules\u002Fwrap-up.md`)\n   - Test one workflow via Knock MCP (not sandbox mode; recipient is current user), then next steps, dashboard link, and close with Knock agent help.\n   - Always mention setting up in-app notifications via `knock-in-app-ui`. If guides were created or mentioned, note that guides need app wiring — then **ask** before starting `knock-in-app-ui` (do not proceed until the user says yes).\n\n## Extension rules (not on the first pass)\n\nUse these when preparing for production or when the user asks — they are optional after the main flow:\n\n- **Import users** (`rules\u002Fimport-users.md`) — choose a stable Knock user id, research how users are stored, set `KNOCK_API_KEY`, and write a dry-run-first bulk-identify script. Do not run against production unless the user explicitly asks.\n\n## Rule files reference\n\n- `rules\u002Fconnect-mcp-cursor.md` — Cursor MCP + skills install\n- `rules\u002Fconnect-mcp-codex.md` — Codex MCP + skills install\n- `rules\u002Fconnect-mcp-claude-code.md` — Claude Code MCP + skills install\n- `rules\u002Fdiscover-workflows.md` — Product discovery and workflow proposals\n- `rules\u002Fbuild-workflows.md` — Build confirmed workflows with Knock MCP\n- `rules\u002Frecommend-implementation.md` — Choose a trigger path, confirm, branch, then implement\n- `rules\u002Fimplement-data-source.md` — Source setup: identify user, mappings, MCP prompts, testing\n- `rules\u002Fwrap-up.md` — MCP workflow test, next steps, dashboard link, and Knock agent help\n- `rules\u002Fimport-users.md` — Extension: bulk-identify users for production readiness\n\n## Quick reference\n\n- MCP server URL: `https:\u002F\u002Fmcp.knock.app\u002Fmcp`\n- Install open-source skills: `npx skills add knocklabs\u002Fskills`\n- Prefer Knock MCP tools for workflow, step, and template creation after tooling is connected\n",{"data":33,"body":34},{"name":4,"description":6},{"type":35,"children":36},"root",[37,46,52,57,72,79,303,309,314,342,348,441,447],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"setup",[43],{"type":44,"value":45},"text","Setup",{"type":38,"tag":47,"props":48,"children":49},"p",{},[50],{"type":44,"value":51},"End-to-end Knock setup for a coding agent: connect tooling, design and build notification workflows, then wire them into the application. Work through the rules below in order.",{"type":38,"tag":47,"props":53,"children":54},{},[55],{"type":44,"value":56},"While working, keep every response to one short line — no summaries, no menus, no extra questions unless a step fails. The only exceptions are the workflow proposals, a prior-confirmation restatement (2–3 lines max), the implementation confirmation ask, the import-users id ask, and the final wrap-up output, which have their own formats. When you end with a confirmation question (workflows, implementation, import-users id, or wrap-up guides ask), that question must be the very last line of the message, on its own, and bolded.",{"type":38,"tag":47,"props":58,"children":59},{},[60,62,70],{"type":44,"value":61},"Assume the user already has a Knock account when this skill is invoked from the Knock dashboard. Otherwise, ask once whether they have an account; if not, point them to ",{"type":38,"tag":63,"props":64,"children":68},"a",{"href":65,"rel":66},"https:\u002F\u002Fdashboard.knock.app\u002F",[67],"nofollow",[69],{"type":44,"value":65},{"type":44,"value":71}," to sign up, then continue.",{"type":38,"tag":73,"props":74,"children":76},"h2",{"id":75},"how-to-use-this-skill",[77],{"type":44,"value":78},"How to use this skill",{"type":38,"tag":80,"props":81,"children":82},"ol",{},[83,136,183,207,252],{"type":38,"tag":84,"props":85,"children":86},"li",{},[87,93],{"type":38,"tag":88,"props":89,"children":90},"strong",{},[91],{"type":44,"value":92},"Connect MCP for the current tool",{"type":38,"tag":94,"props":95,"children":96},"ul",{},[97,109,120,131],{"type":38,"tag":84,"props":98,"children":99},{},[100,102],{"type":44,"value":101},"Cursor → ",{"type":38,"tag":103,"props":104,"children":106},"code",{"className":105},[],[107],{"type":44,"value":108},"rules\u002Fconnect-mcp-cursor.md",{"type":38,"tag":84,"props":110,"children":111},{},[112,114],{"type":44,"value":113},"Codex → ",{"type":38,"tag":103,"props":115,"children":117},{"className":116},[],[118],{"type":44,"value":119},"rules\u002Fconnect-mcp-codex.md",{"type":38,"tag":84,"props":121,"children":122},{},[123,125],{"type":44,"value":124},"Claude Code → ",{"type":38,"tag":103,"props":126,"children":128},{"className":127},[],[129],{"type":44,"value":130},"rules\u002Fconnect-mcp-claude-code.md",{"type":38,"tag":84,"props":132,"children":133},{},[134],{"type":44,"value":135},"If the tool is unknown, ask which one, then follow the matching rule.",{"type":38,"tag":84,"props":137,"children":138},{},[139,144,146,152,154],{"type":38,"tag":88,"props":140,"children":141},{},[142],{"type":44,"value":143},"Discover workflows",{"type":44,"value":145}," (",{"type":38,"tag":103,"props":147,"children":149},{"className":148},[],[150],{"type":44,"value":151},"rules\u002Fdiscover-workflows.md",{"type":44,"value":153},")",{"type":38,"tag":94,"props":155,"children":156},{},[157,178],{"type":38,"tag":84,"props":158,"children":159},{},[160,162,168,170,176],{"type":44,"value":161},"If this conversation already has an approved build list from ",{"type":38,"tag":103,"props":163,"children":165},{"className":164},[],[166],{"type":44,"value":167},"knock-lifecycle-opportunities",{"type":44,"value":169}," or ",{"type":38,"tag":103,"props":171,"children":173},{"className":172},[],[174],{"type":44,"value":175},"knock-product-messaging-strategy",{"type":44,"value":177},", skip rediscovery (see prior-confirmation gate in that rule).",{"type":38,"tag":84,"props":179,"children":180},{},[181],{"type":44,"value":182},"Otherwise learn the product, propose high-value workflows, and confirm which to build.",{"type":38,"tag":84,"props":184,"children":185},{},[186,191,192,198,199],{"type":38,"tag":88,"props":187,"children":188},{},[189],{"type":44,"value":190},"Build workflows",{"type":44,"value":145},{"type":38,"tag":103,"props":193,"children":195},{"className":194},[],[196],{"type":44,"value":197},"rules\u002Fbuild-workflows.md",{"type":44,"value":153},{"type":38,"tag":94,"props":200,"children":201},{},[202],{"type":38,"tag":84,"props":203,"children":204},{},[205],{"type":44,"value":206},"Create confirmed workflows in the Knock development environment via MCP.",{"type":38,"tag":84,"props":208,"children":209},{},[210,215,216,222,223],{"type":38,"tag":88,"props":211,"children":212},{},[213],{"type":44,"value":214},"Recommend an implementation approach",{"type":44,"value":145},{"type":38,"tag":103,"props":217,"children":219},{"className":218},[],[220],{"type":44,"value":221},"rules\u002Frecommend-implementation.md",{"type":44,"value":153},{"type":38,"tag":94,"props":224,"children":225},{},[226,239],{"type":38,"tag":84,"props":227,"children":228},{},[229,231,237],{"type":44,"value":230},"Pick one trigger path, ask the user to confirm, then create branch ",{"type":38,"tag":103,"props":232,"children":234},{"className":233},[],[235],{"type":44,"value":236},"knock-implementation",{"type":44,"value":238}," before file changes.",{"type":38,"tag":84,"props":240,"children":241},{},[242,244,250],{"type":44,"value":243},"For a Knock Data Source (CDP or custom HTTP), follow ",{"type":38,"tag":103,"props":245,"children":247},{"className":246},[],[248],{"type":44,"value":249},"rules\u002Fimplement-data-source.md",{"type":44,"value":251},".",{"type":38,"tag":84,"props":253,"children":254},{},[255,260,261,267,268],{"type":38,"tag":88,"props":256,"children":257},{},[258],{"type":44,"value":259},"Wrap up",{"type":44,"value":145},{"type":38,"tag":103,"props":262,"children":264},{"className":263},[],[265],{"type":44,"value":266},"rules\u002Fwrap-up.md",{"type":44,"value":153},{"type":38,"tag":94,"props":269,"children":270},{},[271,276],{"type":38,"tag":84,"props":272,"children":273},{},[274],{"type":44,"value":275},"Test one workflow via Knock MCP (not sandbox mode; recipient is current user), then next steps, dashboard link, and close with Knock agent help.",{"type":38,"tag":84,"props":277,"children":278},{},[279,281,287,289,294,296,301],{"type":44,"value":280},"Always mention setting up in-app notifications via ",{"type":38,"tag":103,"props":282,"children":284},{"className":283},[],[285],{"type":44,"value":286},"knock-in-app-ui",{"type":44,"value":288},". If guides were created or mentioned, note that guides need app wiring — then ",{"type":38,"tag":88,"props":290,"children":291},{},[292],{"type":44,"value":293},"ask",{"type":44,"value":295}," before starting ",{"type":38,"tag":103,"props":297,"children":299},{"className":298},[],[300],{"type":44,"value":286},{"type":44,"value":302}," (do not proceed until the user says yes).",{"type":38,"tag":73,"props":304,"children":306},{"id":305},"extension-rules-not-on-the-first-pass",[307],{"type":44,"value":308},"Extension rules (not on the first pass)",{"type":38,"tag":47,"props":310,"children":311},{},[312],{"type":44,"value":313},"Use these when preparing for production or when the user asks — they are optional after the main flow:",{"type":38,"tag":94,"props":315,"children":316},{},[317],{"type":38,"tag":84,"props":318,"children":319},{},[320,325,326,332,334,340],{"type":38,"tag":88,"props":321,"children":322},{},[323],{"type":44,"value":324},"Import users",{"type":44,"value":145},{"type":38,"tag":103,"props":327,"children":329},{"className":328},[],[330],{"type":44,"value":331},"rules\u002Fimport-users.md",{"type":44,"value":333},") — choose a stable Knock user id, research how users are stored, set ",{"type":38,"tag":103,"props":335,"children":337},{"className":336},[],[338],{"type":44,"value":339},"KNOCK_API_KEY",{"type":44,"value":341},", and write a dry-run-first bulk-identify script. Do not run against production unless the user explicitly asks.",{"type":38,"tag":73,"props":343,"children":345},{"id":344},"rule-files-reference",[346],{"type":44,"value":347},"Rule files reference",{"type":38,"tag":94,"props":349,"children":350},{},[351,361,371,381,391,401,411,421,431],{"type":38,"tag":84,"props":352,"children":353},{},[354,359],{"type":38,"tag":103,"props":355,"children":357},{"className":356},[],[358],{"type":44,"value":108},{"type":44,"value":360}," — Cursor MCP + skills install",{"type":38,"tag":84,"props":362,"children":363},{},[364,369],{"type":38,"tag":103,"props":365,"children":367},{"className":366},[],[368],{"type":44,"value":119},{"type":44,"value":370}," — Codex MCP + skills install",{"type":38,"tag":84,"props":372,"children":373},{},[374,379],{"type":38,"tag":103,"props":375,"children":377},{"className":376},[],[378],{"type":44,"value":130},{"type":44,"value":380}," — Claude Code MCP + skills install",{"type":38,"tag":84,"props":382,"children":383},{},[384,389],{"type":38,"tag":103,"props":385,"children":387},{"className":386},[],[388],{"type":44,"value":151},{"type":44,"value":390}," — Product discovery and workflow proposals",{"type":38,"tag":84,"props":392,"children":393},{},[394,399],{"type":38,"tag":103,"props":395,"children":397},{"className":396},[],[398],{"type":44,"value":197},{"type":44,"value":400}," — Build confirmed workflows with Knock MCP",{"type":38,"tag":84,"props":402,"children":403},{},[404,409],{"type":38,"tag":103,"props":405,"children":407},{"className":406},[],[408],{"type":44,"value":221},{"type":44,"value":410}," — Choose a trigger path, confirm, branch, then implement",{"type":38,"tag":84,"props":412,"children":413},{},[414,419],{"type":38,"tag":103,"props":415,"children":417},{"className":416},[],[418],{"type":44,"value":249},{"type":44,"value":420}," — Source setup: identify user, mappings, MCP prompts, testing",{"type":38,"tag":84,"props":422,"children":423},{},[424,429],{"type":38,"tag":103,"props":425,"children":427},{"className":426},[],[428],{"type":44,"value":266},{"type":44,"value":430}," — MCP workflow test, next steps, dashboard link, and Knock agent help",{"type":38,"tag":84,"props":432,"children":433},{},[434,439],{"type":38,"tag":103,"props":435,"children":437},{"className":436},[],[438],{"type":44,"value":331},{"type":44,"value":440}," — Extension: bulk-identify users for production readiness",{"type":38,"tag":73,"props":442,"children":444},{"id":443},"quick-reference",[445],{"type":44,"value":446},"Quick reference",{"type":38,"tag":94,"props":448,"children":449},{},[450,461,472],{"type":38,"tag":84,"props":451,"children":452},{},[453,455],{"type":44,"value":454},"MCP server URL: ",{"type":38,"tag":103,"props":456,"children":458},{"className":457},[],[459],{"type":44,"value":460},"https:\u002F\u002Fmcp.knock.app\u002Fmcp",{"type":38,"tag":84,"props":462,"children":463},{},[464,466],{"type":44,"value":465},"Install open-source skills: ",{"type":38,"tag":103,"props":467,"children":469},{"className":468},[],[470],{"type":44,"value":471},"npx skills add knocklabs\u002Fskills",{"type":38,"tag":84,"props":473,"children":474},{},[475],{"type":44,"value":476},"Prefer Knock MCP tools for workflow, step, and template creation after tooling is connected",{"items":478,"total":572},[479,493,509,525,540,554,566],{"slug":480,"name":480,"fn":481,"description":482,"org":483,"tags":484,"stars":23,"repoUrl":24,"updatedAt":492},"knock-cli","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},[485,488,489],{"name":486,"slug":487,"type":16},"CLI","cli",{"name":18,"slug":19,"type":16},{"name":490,"slug":491,"type":16},"Notifications","notifications","2026-07-14T05:23:51.065051",{"slug":286,"name":286,"fn":494,"description":495,"org":496,"tags":497,"stars":23,"repoUrl":24,"updatedAt":508},"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},[498,501,502,505],{"name":499,"slug":500,"type":16},"Frontend","frontend",{"name":18,"slug":19,"type":16},{"name":503,"slug":504,"type":16},"React","react",{"name":506,"slug":507,"type":16},"UI Components","ui-components","2026-07-14T05:23:53.566839",{"slug":167,"name":167,"fn":510,"description":511,"org":512,"tags":513,"stars":23,"repoUrl":24,"updatedAt":524},"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},[514,517,520,521],{"name":515,"slug":516,"type":16},"Engagement","engagement",{"name":518,"slug":519,"type":16},"Marketing","marketing",{"name":18,"slug":19,"type":16},{"name":522,"slug":523,"type":16},"Product Management","product-management","2026-07-27T06:28:50.28638",{"slug":526,"name":526,"fn":527,"description":528,"org":529,"tags":530,"stars":23,"repoUrl":24,"updatedAt":539},"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},[531,534,535,538],{"name":532,"slug":533,"type":16},"Infrastructure","infrastructure",{"name":18,"slug":19,"type":16},{"name":536,"slug":537,"type":16},"Migration","migration",{"name":490,"slug":491,"type":16},"2026-07-27T06:28:49.594684",{"slug":541,"name":541,"fn":542,"description":543,"org":544,"tags":545,"stars":23,"repoUrl":24,"updatedAt":553},"knock-notification-best-practices","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},[546,549,552],{"name":547,"slug":548,"type":16},"Best Practices","best-practices",{"name":550,"slug":551,"type":16},"Communications","communications",{"name":18,"slug":19,"type":16},"2026-07-14T05:23:54.812153",{"slug":175,"name":175,"fn":555,"description":556,"org":557,"tags":558,"stars":23,"repoUrl":24,"updatedAt":565},"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},[559,560,561,562],{"name":515,"slug":516,"type":16},{"name":18,"slug":19,"type":16},{"name":522,"slug":523,"type":16},{"name":563,"slug":564,"type":16},"Strategy","strategy","2026-07-27T06:28:49.935507",{"slug":4,"name":4,"fn":5,"description":6,"org":567,"tags":568,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[569,570,571],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},7,{"items":574,"total":572},[575,581,588,595,602,608,615],{"slug":480,"name":480,"fn":481,"description":482,"org":576,"tags":577,"stars":23,"repoUrl":24,"updatedAt":492},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[578,579,580],{"name":486,"slug":487,"type":16},{"name":18,"slug":19,"type":16},{"name":490,"slug":491,"type":16},{"slug":286,"name":286,"fn":494,"description":495,"org":582,"tags":583,"stars":23,"repoUrl":24,"updatedAt":508},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[584,585,586,587],{"name":499,"slug":500,"type":16},{"name":18,"slug":19,"type":16},{"name":503,"slug":504,"type":16},{"name":506,"slug":507,"type":16},{"slug":167,"name":167,"fn":510,"description":511,"org":589,"tags":590,"stars":23,"repoUrl":24,"updatedAt":524},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[591,592,593,594],{"name":515,"slug":516,"type":16},{"name":518,"slug":519,"type":16},{"name":18,"slug":19,"type":16},{"name":522,"slug":523,"type":16},{"slug":526,"name":526,"fn":527,"description":528,"org":596,"tags":597,"stars":23,"repoUrl":24,"updatedAt":539},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[598,599,600,601],{"name":532,"slug":533,"type":16},{"name":18,"slug":19,"type":16},{"name":536,"slug":537,"type":16},{"name":490,"slug":491,"type":16},{"slug":541,"name":541,"fn":542,"description":543,"org":603,"tags":604,"stars":23,"repoUrl":24,"updatedAt":553},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[605,606,607],{"name":547,"slug":548,"type":16},{"name":550,"slug":551,"type":16},{"name":18,"slug":19,"type":16},{"slug":175,"name":175,"fn":555,"description":556,"org":609,"tags":610,"stars":23,"repoUrl":24,"updatedAt":565},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[611,612,613,614],{"name":515,"slug":516,"type":16},{"name":18,"slug":19,"type":16},{"name":522,"slug":523,"type":16},{"name":563,"slug":564,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":616,"tags":617,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[618,619,620],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16}]