Agent Native

novu-dashboard-workflows

This skill helps agents write and edit step content for Novu notification workflows in the Dashboard or via Novu MCP.

by novuhqCommunityNot reviewed

Community author

Agents
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode
License
MIT (permissive)
Pin
067f4fepinned Oct 9, 2026
Context cost
about 1,500 tokenswhen the skill loads
GitHub stars
4on novuhq/skills
Scripts
None found

What it does

“Author step content for Novu workflows defined in the Dashboard or generated/edited 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.”
The author's description, from SKILL.md

Generated summary from the skill's own text

This skill helps agents write and edit step content for Novu notification workflows in the Dashboard or via Novu MCP. It provides rules for authoring subjects, bodies, headers, conditions, and other controls across email, SMS, push, chat, in-app, delay, digest, throttle, and HTTP Request steps using Liquid variables for personalization.

When to use it

  • Editing Dashboard workflow step controls like subject, body, or headers
  • Calling Novu MCP tools that write workflow step content
  • Adding step conditions to control when notifications send
  • Referencing HTTP response data in steps after an HTTP Request step

When not to

  • Authoring workflows entirely in code with @novu/framework SDK
  • Deciding workflow design before filling in step content

Install

These commands install from the publisher's repository and need no account.

skills CLI

npx skills add novuhq/skills --skill novu-dashboard-workflows

Installs from the repository's default branch, which may have changed since the commit we checked.

GitHub CLI 2.90 or later

gh skill install novuhq/skills novu-dashboard-workflows@067f4fe39d0ecc4ef6713ec2d145d13f835737aa

Installs the commit we checked (067f4fe).

Copy by hand

Download the folder at 067f4fe and put it in .claude/skills/novu-dashboard-workflows for Claude Code and in .agents/skills/novu-dashboard-workflows for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.

Skill folder on GitHub at 067f4fe

Copy for your agent

A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.

Prompt

Install the agent skill "novu-dashboard-workflows" by novuhq.

Source, pinned to commit 067f4fe39d0ecc4ef6713ec2d145d13f835737aa:
https://github.com/novuhq/skills/tree/067f4fe39d0ecc4ef6713ec2d145d13f835737aa/skills/dashboard-workflows

1. Download that folder at exactly this commit. Do not use the default branch.
2. Copy every file unchanged, keeping the folder structure, into .claude/skills/novu-dashboard-workflows/ for Claude Code and .agents/skills/novu-dashboard-workflows/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist.
3. Do not edit the files, and do not run any script in the folder unless I ask you to.
4. When you are done, list the files you copied and where you put them.

Listing and checks: https://www.agentnative.dev/skills/novuhq/novu-dashboard-workflows

SKILL.md at the pin

---
name: novu-dashboard-workflows
description: Author step content for Novu workflows defined in the Dashboard or generated/edited 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.
inputs:
  - name: NOVU_SECRET_KEY
    description: "Server-side API key from https://dashboard.novu.co/api-keys. Used by the Novu MCP and Dashboard automation."
    required: true
    type: secret
---

# Dashboard Workflows

Rules for authoring **step content** (subject, body, `editorType`, headers, body, conditions) on workflows that live in the Novu Dashboard — whether you're editing them by hand or via the Novu MCP.

> Authoring **in code** with [`@novu/framework`](../framework-integration)? Skip this skill — the Framework SDK encodes these constraints in its types and helpers.
>
> Still need to **decide** what the workflow should look like (channels, severity, critical, digest, templates)? Start with [`design-workflow/`](../design-workflow), then come back here to fill in the step content.

## When to use this skill

Use it whenever you write or edit the **controls** of a Dashboard / MCP step:

- "Set the email subject and body for this step"
- "Update the in-app notification copy"
- "Add headers to this HTTP Request step"
- "Change the digest window to 1 hour"
- "Skip this step when the subscriber is offline" (step condition)
- Any Novu MCP tool call that writes step content (`create_workflow`, `update_workflow_step`, etc.)

## Step Content Guidelines

These rules apply to **every** step type.

- Use Liquid variables in control values for personalization. Variables must be wrapped in double curly braces `{{` and `}}`. Example: `{{ subscriber.firstName }}`, `{{ payload.* }}`.
- **EXCEPTION:** In Block Editor (`editorType: "block"`) node attributes, never use curly braces — use bare variable names like `payload.actionUrl` instead of `{{ payload.actionUrl }}`. See [`references/email-step.md`](./references/email-step.md) for the full Block Editor rules.
- For steps **after** an HTTP Request step, use `{{ steps.<http-step-id>.<property> }}` to reference response data. Only properties defined in that HTTP step's `responseBodySchema` are available — never invent arbitrary response fields. Example: if HTTP step `fetch-user` defines `responseBodySchema` with `name` and `email`, use `{{ steps.fetch-user.name }}` and `{{ steps.fetch-user.email }}`.
- Never hardcode URLs, names, or product names — use variables instead.
- Keep content consistent with other workflow steps.
- Modify the content according to the user's intent.
- Preserve everything not explicitly asked to change.
- Keep the same `editorType` (`block` or `html` for email) and structure.

## Step Types

Each step type has its own content rules. Open the matching reference before writing controls.

| Step type      | Reference                                                       | Use it for                                                  |
| -------------- | --------------------------------------------------------------- | ----------------------------------------------------------- |
| Email          | [`references/email-step.md`](./references/email-step.md)         | Detailed content, formal communications, receipts           |
| In-App         | [`references/in-app-step.md`](./references/in-app-step.md)       | Real-time updates, activity feeds, high engagement          |
| SMS            | [`references/sms-step.md`](./references/sms-step.md)             | Urgent alerts, verification codes, time-sensitive messages  |
| Push           | [`references/push-step.md`](./references/push-step.md)           | Mobile engagement, re-engagement, time-sensitive updates    |
| Chat           | [`references/chat-step.md`](./references/chat-step.md)           | Slack / Discord / Teams team & developer alerts             |
| Delay          | [`references/delay-step.md`](./references/delay-step.md)         | Pause workflow execution before a channel step              |
| Digest         | [`references/digest-step.md`](./references/digest-step.md)       | Batch multiple notifications into one                       |
| Throttle       | [`references/throttle-step.md`](./references/throttle-step.md)   | Limit notification frequency, prevent fatigue               |
| HTTP Request   | [`references/http-request-step.md`](./references/http-request-step.md) | Call external APIs / webhooks; fetch data for later steps   |
| Step condition | [`references/step-conditions.md`](./references/step-conditions.md) | JSON-Logic for "send only if…", merge / replace / remove    |

## Common Pitfalls

1. **Curly braces inside Block Editor attributes** — Maily TipTap node attrs (`url`, `text`, `src`, `id`, `each`, `href`, `externalLink`) take **bare** variable names. `"{{ payload.actionUrl }}"` is wrong; `"payload.actionUrl"` is right. See [`references/email-step.md`](./references/email-step.md).
2. **Referencing undeclared HTTP response fields** — `{{ steps.<http-step-id>.<property> }}` only works for properties listed in that step's `responseBodySchema`. Add the property to the schema first.
3. **Hardcoding array items instead of looping** — when the payload contains an array (`payload.items`, `payload.providers`), iterate with a Block Editor `repeat` node or an HTML `{% for %}` loop. Don't list array items as separate nodes / elements.
4. **Empty key/value entries in HTTP headers or body** — use an empty array `[]` when not needed. Never `[{ "key": "", "value": "" }]`.
5. **Hardcoded URLs / product names** — always pull from `payload.*` or `subscriber.*` so the workflow stays portable.
6. **Changing `editorType` when editing email** — keep `block` as `block` and `html` as `html` unless the user explicitly asks to switch.
7. **Replacing a step condition when the user said "add"** — "add" / "also" / "and" merges with `{ "and": [...] }`; "change to" / "set to" replaces; "remove" / "clear" returns `null`. See [`references/step-conditions.md`](./references/step-conditions.md).

## See Also

- [`design-workflow/`](../design-workflow) — choose channels, severity, `critical`, digest defaults, and pick a workflow template **before** authoring step content
- [`framework-integration/`](../framework-integration) — author the same workflows in code with `@novu/framework` instead
- [`trigger-notification/`](../trigger-notification) — fire a workflow once it's authored

From novuhq/skills at 067f4fe, shown as plain text under its license: MIT (permissive). The license text is in LICENSE.

View SKILL.md on GitHub at 067f4fe

Files

11 files, 29 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.

Skill folder on GitHub at 067f4fe
All Backend and APIs skills
  • supabase

    This skill enables the agent to work with Supabase products including Database, Auth, Edge Functions, Realtime, Storage, and Vectors.

    by SupabaseOfficial publisher

    Claude Code, Codex, Cursor +4 · about 3.3K tokens · pinned 6 days ago

  • vercel-connect

    Vercel Connect lets applications obtain short-lived scoped credentials from third-party services like Slack, GitHub, and Linear without storing API keys in…

    by VercelOfficial publisher

    Claude Code, Codex, Cursor +3 · about 4.4K tokens · pinned 6 days ago

  • apollo-connectors

    This skill helps integrate REST APIs into GraphQL supergraphs using Apollo Connectors with @source and @connect directives.

    by Apollo GraphQLOfficial publisher

    Claude Code, Codex, Cursor +4 · about 1.6K tokens · pinned 6 days ago

  • neon

    Neon is a cloud backend platform providing Postgres, auth, object storage, serverless functions, and an AI gateway with branching, zero-scale compute, and…

    by NeonOfficial publisher

    Claude Code, Codex, Cursor +4 · about 8.5K tokens · pinned 6 days ago

  • neon-functions

    Neon Functions deploys long-running Node.js HTTP handlers to your Neon database branch, injecting DATABASE_URL and hosting stateful workloads like AI agents…

    by NeonOfficial publisher

    Claude Code, Codex, Cursor +4 · about 11.9K tokens · pinned 6 days ago

  • runway-dev-workflows

    This skill builds, modifies, and debugs integrations that expose Runway app workflows as API endpoints.

    by RunwayOfficial publisher

    Claude Code · about 340 tokens · pinned 6 days ago

The skills listed here are third-party software, collected from public GitHub repositories as a catalog of recent skills and provided as is. Agent Native does not write or control them and is not responsible for any harm, loss or damage caused by installing or using them. Labels and checks describe what we saw at one commit and are not a guarantee. Read a skill's files before you run it. Terms of use