[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-novu-env-setup":3,"mdc--uctqxd-key":47,"related-org-novu-env-setup":435,"related-repo-novu-env-setup":538},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":42,"sourceUrl":45,"mdContent":46},"env-setup","configure Novu environment variables","Create or update Novu environment variables in the user's project safely (never expose the secret key to the client). Complements the official Novu skills by covering project-level env configuration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"novu","Novu","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnovu.png","novuhq",[13,17,20],{"name":14,"slug":15,"type":16},"Configuration","configuration","tag",{"name":18,"slug":19,"type":16},"Environment Variables","environment-variables",{"name":21,"slug":22,"type":16},"Notifications","notifications",39301,"https:\u002F\u002Fgithub.com\u002Fnovuhq\u002Fnovu","2026-07-13T06:21:58.740401",null,4357,[29,30,31,32,33,34,35,22,8,36,37,38,39,40,41],"agents","communication","email","inbox","infrastructure","nodejs","notification-center","push-notifications","react","reactjs","sms","transactional","typescript",{"repoUrl":24,"stars":23,"forks":27,"topics":43,"description":44},[29,30,31,32,33,34,35,22,8,36,37,38,39,40,41],"The open-source communication infrastructure for agents and products","https:\u002F\u002Fgithub.com\u002Fnovuhq\u002Fnovu\u002Ftree\u002FHEAD\u002Fpackages\u002Fnovu\u002Fsrc\u002Fcommands\u002Fwizard\u002Fskills\u002Fcontent\u002Fenv-setup","---\nname: env-setup\ndescription: Create or update Novu environment variables in the user's project safely (never expose the secret key to the client). Complements the official Novu skills by covering project-level env configuration.\ntriggers:\n  - configure novu env vars\n  - add novu keys to .env\n  - secret key handling\n---\n\n# Novu environment setup\n\nApply this skill exactly once per project, before installing client snippets.\n\n## Required variables\n\n| Variable | Where it lives | Purpose |\n|---|---|---|\n| `NOVU_SECRET_KEY` | Server only | Auth for `@novu\u002Fapi`, `@novu\u002Fframework`, MCP, CLI. |\n| `NEXT_PUBLIC_NOVU_APPLICATION_IDENTIFIER` (Next.js) \u002F `VITE_NOVU_APPLICATION_IDENTIFIER` (Vite) \u002F `REACT_APP_NOVU_APPLICATION_IDENTIFIER` (CRA) | Client | Identifies the Novu application for the Inbox component. |\n\nOptional:\n\n- `NOVU_API_URL=https:\u002F\u002Feu.api.novu.co` for EU tenants.\n- `NEXT_PUBLIC_NOVU_SUBSCRIBER_ID` (only for static \u002F demo apps that don't have a real auth provider — never use this in production).\n\n## Rules\n\n1. **Never** prefix `NOVU_SECRET_KEY` with `NEXT_PUBLIC_*`, `VITE_*`, or `REACT_APP_*`. Doing so leaks it into the client bundle.\n2. Add new variables to all of the project's env files: `.env.local`, `.env.example`, and (if present) deployment manifests like `vercel.json`, `netlify.toml`, or `fly.toml`.\n3. Update `.gitignore` to ensure `.env.local` is ignored.\n4. If the project uses `@t3-oss\u002Fenv-nextjs` or similar typed env loaders, register the new keys in their schema.\n\n## Verification checklist\n\n- [ ] `.env.example` contains placeholder entries for every variable above.\n- [ ] `.env.local` (or platform-specific equivalent) has real values.\n- [ ] No `console.log` or telemetry call prints the secret key.\n- [ ] Secret key does not appear in any file under `public\u002F`, `src\u002Fcomponents\u002F`, or any client bundle entrypoint.\n",{"data":48,"body":53},{"name":4,"description":6,"triggers":49},[50,51,52],"configure novu env vars","add novu keys to .env","secret key handling",{"type":54,"children":55},"root",[56,65,71,78,190,195,222,228,348,354],{"type":57,"tag":58,"props":59,"children":61},"element","h1",{"id":60},"novu-environment-setup",[62],{"type":63,"value":64},"text","Novu environment setup",{"type":57,"tag":66,"props":67,"children":68},"p",{},[69],{"type":63,"value":70},"Apply this skill exactly once per project, before installing client snippets.",{"type":57,"tag":72,"props":73,"children":75},"h2",{"id":74},"required-variables",[76],{"type":63,"value":77},"Required variables",{"type":57,"tag":79,"props":80,"children":81},"table",{},[82,106],{"type":57,"tag":83,"props":84,"children":85},"thead",{},[86],{"type":57,"tag":87,"props":88,"children":89},"tr",{},[90,96,101],{"type":57,"tag":91,"props":92,"children":93},"th",{},[94],{"type":63,"value":95},"Variable",{"type":57,"tag":91,"props":97,"children":98},{},[99],{"type":63,"value":100},"Where it lives",{"type":57,"tag":91,"props":102,"children":103},{},[104],{"type":63,"value":105},"Purpose",{"type":57,"tag":107,"props":108,"children":109},"tbody",{},[110,150],{"type":57,"tag":87,"props":111,"children":112},{},[113,124,129],{"type":57,"tag":114,"props":115,"children":116},"td",{},[117],{"type":57,"tag":118,"props":119,"children":121},"code",{"className":120},[],[122],{"type":63,"value":123},"NOVU_SECRET_KEY",{"type":57,"tag":114,"props":125,"children":126},{},[127],{"type":63,"value":128},"Server only",{"type":57,"tag":114,"props":130,"children":131},{},[132,134,140,142,148],{"type":63,"value":133},"Auth for ",{"type":57,"tag":118,"props":135,"children":137},{"className":136},[],[138],{"type":63,"value":139},"@novu\u002Fapi",{"type":63,"value":141},", ",{"type":57,"tag":118,"props":143,"children":145},{"className":144},[],[146],{"type":63,"value":147},"@novu\u002Fframework",{"type":63,"value":149},", MCP, CLI.",{"type":57,"tag":87,"props":151,"children":152},{},[153,180,185],{"type":57,"tag":114,"props":154,"children":155},{},[156,162,164,170,172,178],{"type":57,"tag":118,"props":157,"children":159},{"className":158},[],[160],{"type":63,"value":161},"NEXT_PUBLIC_NOVU_APPLICATION_IDENTIFIER",{"type":63,"value":163}," (Next.js) \u002F ",{"type":57,"tag":118,"props":165,"children":167},{"className":166},[],[168],{"type":63,"value":169},"VITE_NOVU_APPLICATION_IDENTIFIER",{"type":63,"value":171}," (Vite) \u002F ",{"type":57,"tag":118,"props":173,"children":175},{"className":174},[],[176],{"type":63,"value":177},"REACT_APP_NOVU_APPLICATION_IDENTIFIER",{"type":63,"value":179}," (CRA)",{"type":57,"tag":114,"props":181,"children":182},{},[183],{"type":63,"value":184},"Client",{"type":57,"tag":114,"props":186,"children":187},{},[188],{"type":63,"value":189},"Identifies the Novu application for the Inbox component.",{"type":57,"tag":66,"props":191,"children":192},{},[193],{"type":63,"value":194},"Optional:",{"type":57,"tag":196,"props":197,"children":198},"ul",{},[199,211],{"type":57,"tag":200,"props":201,"children":202},"li",{},[203,209],{"type":57,"tag":118,"props":204,"children":206},{"className":205},[],[207],{"type":63,"value":208},"NOVU_API_URL=https:\u002F\u002Feu.api.novu.co",{"type":63,"value":210}," for EU tenants.",{"type":57,"tag":200,"props":212,"children":213},{},[214,220],{"type":57,"tag":118,"props":215,"children":217},{"className":216},[],[218],{"type":63,"value":219},"NEXT_PUBLIC_NOVU_SUBSCRIBER_ID",{"type":63,"value":221}," (only for static \u002F demo apps that don't have a real auth provider — never use this in production).",{"type":57,"tag":72,"props":223,"children":225},{"id":224},"rules",[226],{"type":63,"value":227},"Rules",{"type":57,"tag":229,"props":230,"children":231},"ol",{},[232,273,315,335],{"type":57,"tag":200,"props":233,"children":234},{},[235,241,243,248,250,256,257,263,265,271],{"type":57,"tag":236,"props":237,"children":238},"strong",{},[239],{"type":63,"value":240},"Never",{"type":63,"value":242}," prefix ",{"type":57,"tag":118,"props":244,"children":246},{"className":245},[],[247],{"type":63,"value":123},{"type":63,"value":249}," with ",{"type":57,"tag":118,"props":251,"children":253},{"className":252},[],[254],{"type":63,"value":255},"NEXT_PUBLIC_*",{"type":63,"value":141},{"type":57,"tag":118,"props":258,"children":260},{"className":259},[],[261],{"type":63,"value":262},"VITE_*",{"type":63,"value":264},", or ",{"type":57,"tag":118,"props":266,"children":268},{"className":267},[],[269],{"type":63,"value":270},"REACT_APP_*",{"type":63,"value":272},". Doing so leaks it into the client bundle.",{"type":57,"tag":200,"props":274,"children":275},{},[276,278,284,285,291,293,299,300,306,307,313],{"type":63,"value":277},"Add new variables to all of the project's env files: ",{"type":57,"tag":118,"props":279,"children":281},{"className":280},[],[282],{"type":63,"value":283},".env.local",{"type":63,"value":141},{"type":57,"tag":118,"props":286,"children":288},{"className":287},[],[289],{"type":63,"value":290},".env.example",{"type":63,"value":292},", and (if present) deployment manifests like ",{"type":57,"tag":118,"props":294,"children":296},{"className":295},[],[297],{"type":63,"value":298},"vercel.json",{"type":63,"value":141},{"type":57,"tag":118,"props":301,"children":303},{"className":302},[],[304],{"type":63,"value":305},"netlify.toml",{"type":63,"value":264},{"type":57,"tag":118,"props":308,"children":310},{"className":309},[],[311],{"type":63,"value":312},"fly.toml",{"type":63,"value":314},".",{"type":57,"tag":200,"props":316,"children":317},{},[318,320,326,328,333],{"type":63,"value":319},"Update ",{"type":57,"tag":118,"props":321,"children":323},{"className":322},[],[324],{"type":63,"value":325},".gitignore",{"type":63,"value":327}," to ensure ",{"type":57,"tag":118,"props":329,"children":331},{"className":330},[],[332],{"type":63,"value":283},{"type":63,"value":334}," is ignored.",{"type":57,"tag":200,"props":336,"children":337},{},[338,340,346],{"type":63,"value":339},"If the project uses ",{"type":57,"tag":118,"props":341,"children":343},{"className":342},[],[344],{"type":63,"value":345},"@t3-oss\u002Fenv-nextjs",{"type":63,"value":347}," or similar typed env loaders, register the new keys in their schema.",{"type":57,"tag":72,"props":349,"children":351},{"id":350},"verification-checklist",[352],{"type":63,"value":353},"Verification checklist",{"type":57,"tag":196,"props":355,"children":358},{"className":356},[357],"contains-task-list",[359,379,394,411],{"type":57,"tag":200,"props":360,"children":363},{"className":361},[362],"task-list-item",[364,370,372,377],{"type":57,"tag":365,"props":366,"children":369},"input",{"disabled":367,"type":368},true,"checkbox",[],{"type":63,"value":371}," ",{"type":57,"tag":118,"props":373,"children":375},{"className":374},[],[376],{"type":63,"value":290},{"type":63,"value":378}," contains placeholder entries for every variable above.",{"type":57,"tag":200,"props":380,"children":382},{"className":381},[362],[383,386,387,392],{"type":57,"tag":365,"props":384,"children":385},{"disabled":367,"type":368},[],{"type":63,"value":371},{"type":57,"tag":118,"props":388,"children":390},{"className":389},[],[391],{"type":63,"value":283},{"type":63,"value":393}," (or platform-specific equivalent) has real values.",{"type":57,"tag":200,"props":395,"children":397},{"className":396},[362],[398,401,403,409],{"type":57,"tag":365,"props":399,"children":400},{"disabled":367,"type":368},[],{"type":63,"value":402}," No ",{"type":57,"tag":118,"props":404,"children":406},{"className":405},[],[407],{"type":63,"value":408},"console.log",{"type":63,"value":410}," or telemetry call prints the secret key.",{"type":57,"tag":200,"props":412,"children":414},{"className":413},[362],[415,418,420,426,427,433],{"type":57,"tag":365,"props":416,"children":417},{"disabled":367,"type":368},[],{"type":63,"value":419}," Secret key does not appear in any file under ",{"type":57,"tag":118,"props":421,"children":423},{"className":422},[],[424],{"type":63,"value":425},"public\u002F",{"type":63,"value":141},{"type":57,"tag":118,"props":428,"children":430},{"className":429},[],[431],{"type":63,"value":432},"src\u002Fcomponents\u002F",{"type":63,"value":434},", or any client bundle entrypoint.",{"items":436,"total":537},[437,443,459,471,484,503,514,526],{"slug":4,"name":4,"fn":5,"description":6,"org":438,"tags":439,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[440,441,442],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"slug":444,"name":444,"fn":445,"description":446,"org":447,"tags":448,"stars":456,"repoUrl":457,"updatedAt":458},"novu-dashboard-workflows","author Novu workflow step content","Author step content for Novu workflows defined in the Dashboard or generated\u002Fedited via the Novu MCP. Use when filling in step controls (subject, body, editorType, headers, body, conditions) for email, in-app, sms, push, chat, delay, digest, throttle, or HTTP Request steps.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[449,452,453],{"name":450,"slug":451,"type":16},"MCP","mcp",{"name":21,"slug":22,"type":16},{"name":454,"slug":455,"type":16},"Workflow Automation","workflow-automation",1,"https:\u002F\u002Fgithub.com\u002Fnovuhq\u002Fskills","2026-07-13T06:21:22.380822",{"slug":460,"name":460,"fn":461,"description":462,"org":463,"tags":464,"stars":456,"repoUrl":457,"updatedAt":470},"novu-design-workflow","design Novu notification workflows","Design notification workflows the Novu way — choose channels, set severity, decide when a workflow is critical, configure digests, and route based on subscriber state. Applies to BOTH dashboard-authored and code-first (`@novu\u002Fframework`) workflows. Use when planning a new workflow, deciding which channels to include, picking severity, configuring digest behavior, or matching a use case (order confirmation, payment failed, account suspended, comment, trial expiring, password reset, webhook fan-out, fetch-then-notify) to a proven template.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[465,468,469],{"name":466,"slug":467,"type":16},"Messaging","messaging",{"name":21,"slug":22,"type":16},{"name":454,"slug":455,"type":16},"2026-07-16T06:02:17.656187",{"slug":472,"name":472,"fn":473,"description":474,"org":475,"tags":476,"stars":456,"repoUrl":457,"updatedAt":483},"novu-framework-integration","build code-first notification workflows","Build code-first notification workflows with @novu\u002Fframework. Use when defining workflows in TypeScript (Zod \u002F JSON Schema \u002F Class Validator), composing channel steps (email, SMS, push, chat, in-app) with action steps (delay, digest, custom), exposing Step Controls for non-technical teammates, rendering React\u002FVue\u002FSvelte Email templates, hosting the Bridge Endpoint inside Next.js, Express, NestJS, Remix, Nuxt, SvelteKit, H3, or AWS Lambda, syncing to Novu Cloud via CLI \u002F GitHub Actions, securing production with HMAC, or implementing translations, hydration, multi-channel orchestration, and LLM-powered notification logic in code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[477,480,481],{"name":478,"slug":479,"type":16},"Backend","backend",{"name":21,"slug":22,"type":16},{"name":482,"slug":41,"type":16},"TypeScript","2026-07-13T06:21:20.83585",{"slug":485,"name":485,"fn":486,"description":487,"org":488,"tags":489,"stars":456,"repoUrl":457,"updatedAt":502},"novu-inbox-integration","integrate Novu in-app notification inbox","Integrate Novu's in-app notification inbox into web applications. Supports React, Next.js, and vanilla JavaScript. Includes the Inbox component (bell icon + notification feed), composable components (Bell, Notifications, InboxContent, Preferences), headless hooks, branded theming, custom render props, multi-tenancy via contexts, tabs, localization, and HMAC security. Use when adding an in-app notification center, bell icon, notification feed, real-time notification updates, or building a personalized and branded notification experience.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[490,493,496,499,500],{"name":491,"slug":492,"type":16},"Frontend","frontend",{"name":494,"slug":495,"type":16},"JavaScript","javascript",{"name":497,"slug":498,"type":16},"Next.js","next-js",{"name":21,"slug":22,"type":16},{"name":501,"slug":37,"type":16},"React","2026-07-13T06:21:11.359078",{"slug":504,"name":504,"fn":505,"description":506,"org":507,"tags":508,"stars":456,"repoUrl":457,"updatedAt":513},"novu-manage-preferences","configure Novu notification preferences","Configure notification preferences in Novu at the workflow and subscriber level. Set default channel preferences (email, SMS, push, chat, in-app), mark preferences as read-only or subscriber-editable, and manage subscriber-specific overrides. Use when setting up notification opt-in\u002Fopt-out, configuring per-channel delivery preferences, or building a preferences management UI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[509,510],{"name":21,"slug":22,"type":16},{"name":511,"slug":512,"type":16},"Operations","operations","2026-07-13T06:21:30.061407",{"slug":515,"name":515,"fn":516,"description":517,"org":518,"tags":519,"stars":456,"repoUrl":457,"updatedAt":525},"novu-manage-subscribers","manage Novu notification subscribers and topics","Create, update, search, and delete subscribers in Novu. Manage topics for group-based notification targeting. Set subscriber credentials for push and chat channels. Use when managing notification recipients, creating subscriber records, organizing subscribers into topics, or configuring channel-specific credentials.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[520,523,524],{"name":521,"slug":522,"type":16},"API Development","api-development",{"name":466,"slug":467,"type":16},{"name":21,"slug":22,"type":16},"2026-07-16T06:00:28.792114",{"slug":527,"name":527,"fn":528,"description":529,"org":530,"tags":531,"stars":456,"repoUrl":457,"updatedAt":536},"novu-trigger-notification","trigger Novu notification workflows","Trigger Novu notification workflows to send messages across email, SMS, push, chat, and in-app channels. Supports single triggers, bulk triggers, broadcast to all subscribers, topic-based targeting, and cancellation. Use when sending transactional notifications, alerts, or any event-driven messages.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[532,535],{"name":533,"slug":534,"type":16},"Automation","automation",{"name":21,"slug":22,"type":16},"2026-07-13T06:21:23.63132",8,{"items":539,"total":456},[540],{"slug":4,"name":4,"fn":5,"description":6,"org":541,"tags":542,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[543,544,545],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16}]