Agent skill

Notifications

by vellum-ai in vellum-ai/vellum-assistant

Send notifications through the unified notification router. An agent skill from vellum-ai/vellum-assistant.

MITAuto-check passed

Install Notifications

skills CLI
$ npx skills add vellum-ai/vellum-assistant --skill notifications -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install vellum-ai/vellum-assistant notifications --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/notifications .claude/skills/notifications && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
notifications
GitHub stars
1.4k
Token cost
~3.8k tokens
SKILL.md length
1,296 words
Files
1
Skills in repo
108
Repo updated
First seen
Licence
MIT

At a glance

Send notifications through the unified notification router. An agent skill from vellum-ai/vellum-assistant.

  • SKILL.md covers Sending Notifications, Reading Surfaced Notifications, Editing Notifications and Important
  • Calls jq

What it does

Notifications is an agent skill from vellum-ai/vellum-assistant. Send notifications through the unified notification router

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for Vellum personal assistants

The repository describes itself as: An AI Assistant that’s easy to setup, does your work 24/7, knows your preferences and gets better over time. The licence is MIT.

Example prompts

  • “/notifications”

Requirements

  • Compatibility (from SKILL.md): Designed for Vellum personal assistants

What it can do on your machine

Read from SKILL.md and the folder at commit 33cc983. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Vellum personal assistants

    From compatibility in the SKILL.md frontmatter.

Context cost

Notifications loads about 3.8k tokens when it runs. Until then it costs about 18 tokens; SKILL.md has 1,296 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~18
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from vellum-ai/vellum-assistant at commit 33cc983, republished under its MIT licence (© vellum-ai). 1,296 words, ~3,830 tokens.

Download SKILL.mdSave it as .claude/skills/notifications/SKILL.md (or your agent's skills folder).
name
notifications
description
Send notifications through the unified notification router
compatibility
Designed for Vellum personal assistants
metadata.emoji
🔔

Call this when something happened that the user would want to know about — a completed task with a notable outcome, an interesting observation, a positive trend you noticed in monitored data, useful research worth surfacing, a workflow that got blocked, a credential or token failure, etc. Do not call it for routine task completions where nothing notable happened. When in doubt and you have a real observation to share, share it.

Exception: you are running a schedule. The "was this notable?" test does not apply to a scheduled run. The user picked the cadence; the run happening at all is what they asked to see. A scheduled run that produces any user-facing output (a briefing, a digest, a report, or a check whose answer is "nothing changed") ends by sending that output as a notification. Writing it into the conversation and stopping does not reach the user: nobody is looking at a scheduled run's conversation.

That does not license noise. Judgment moves from whether to notify to what to say: a run with a genuinely empty result says so in one line rather than padding it, and a run that only did silent housekeeping (rotating a cache, syncing a file) with nothing to report stays quiet.

Watcher ticks are not scheduled runs. A watcher stays quiet unless its action prompt says this event is worth surfacing. Unmatched events and polls with nothing new must not produce a notification.

Sending Notifications

Always pass --title. Skipping it triggers a fallback that just truncates --message to 60 chars and shows it as the title — the user sees the same text twice with no scannability gained.

bash
assistant notifications send \
  --title "Short headline" \
  --message "Your verbatim observation in your own words"

For time-sensitive items:

bash
assistant notifications send --title "..." --message "..." --urgent
Command Reference
FlagRequiredDescription
--message <message>YesNotification body. Markdown (GFM) renders in the detail panel; the OS banner shows plain text.
--title <title>Yes in practiceShort headline (≤ 8 words). Omitting it triggers a body-truncation fallback that shows up as a duplicate of --message — always write a real title.
--urgentNoMark as needing attention now/soon
--preferred-channelsNoAdditive channel hints. Vellum stays selected.
--channelsNoExclusive allowlist (e.g. telegram). Replaces the default set. Urgent delivery does not add vellum or platform. Wins over --preferred-channels.
--jsonNoOutput machine-readable JSON
Title

Write a --title for every notification. It's the only line the user sees in the lock-screen popup and the collapsed row of the notification list, so a short noun phrase (≤ 8 words) is what makes the notification scannable. If you omit --title, the system falls back to the first sentence of --message (truncated at 60 chars) — that's almost always worse than what you'd write, because it duplicates body text the user is already going to read.

Avoid restating the first sentence of --message verbatim — the title should add scannability, not duplicate.

Message

The body renders as markdown (GFM) in the home feed detail panel — where the user actually opens the notification on web, iOS, and macOS. Light markdown makes multi-fact bodies scannable. The OS lock-screen banner shows the body as plain text, so prefer inline emphasis over heavy structure that looks ugly unrendered.

Supported: **bold**, *italic*, `inline code`, fenced code blocks, links, bulleted and numbered lists, blockquotes, headings, GFM tables, ~~strikethrough~~.

Use it like this:

  • Bold the headline fact when the body has more than one sentence.
  • Bullets or numbered lists when surfacing multiple discrete items (failures, files touched, missed messages).
  • Inline code for identifiers, paths, commands, and short snippets.
  • Fenced code blocks for multi-line output (stack traces, diffs).

Avoid large headings (#, ##) and wide tables — they render fine in the panel but look noisy in the banner preview.

Urgent semantics

Use --urgent for items needing attention now/soon (blocked work, broken auth, time-sensitive issues). Skip for items the user should see when they have time.

Channel routing

--preferred-channels adds extra surfaces on top of the default set (vellum stays selected). --channels is exclusive: only those connected channels are selected. Use --channels telegram when the user asked for Telegram only. Home does not mirror an exclusive send unless vellum is in the list. When both flags are set, --channels wins.

Examples
bash
# Plain notification — bold the headline fact
assistant notifications send \
  --title "Backup complete" \
  --message "Nightly backup finished — **12.4 GB** archived to cold storage across **3** datasets."

# Urgent notification — inline code for the identifier
assistant notifications send \
  --title "Auth token expired" \
  --message "Sync is paused until you reauthenticate the \`GitHub\` integration." \
  --urgent
Response Format
json
{
  "ok": true,
  "signalId": "...",
  "dispatched": true,
  "selectedChannels": ["telegram"],
  "deliveryResults": [],
  "receiptClass": "unknown"
}

dispatched means the pipeline attempted delivery. receiptClass is the strongest proof the adapters reported (provider_accepted, gateway_accepted, client_os_posted, or unknown). It is not proof the user saw a banner. Check selectedChannels and deliveryResults before telling the user the alert landed.

Reading Surfaced Notifications

bash
assistant notifications list --json

Reads from the user's home feed ($VELLUM_WORKSPACE_DIR/data/home-feed.json) — the inbox that mirrors background and async notifications surfaced via the unified pipeline. Real-time chat pushes that did not mirror to the feed (direct Telegram/Slack/Vellum-chat sends without --is-async-background) will not appear here.

Show full SKILL.md (536 more words)Show less
When to call
  • Before sending: check whether you already surfaced a similar item recently (filter by --conversation-id or --after to dedupe).
  • Catch-up summaries: when the user asks "what did I miss" or returns after a session break, list the items they haven't dismissed.
  • Lookup: when the user references a past notification ("the email thing you flagged earlier"), find it by --conversation-id or date range.
Filters
FlagPurpose
--allInclude dismissed items (default: excluded — assistant cares about outstanding work)
--status <s>Filter by status (new / seen / acted_on / dismissed); repeatable. Overrides the --all default.
--before <iso> / --after <iso>ISO-8601 createdAt bounds (strict; = is excluded).
--urgency <u>Filter by urgency (low / medium / high / critical); repeatable.
--category <c>Filter by category (security / scheduling / background / email / system); repeatable.
--conversation-id <id>Only items tied to this conversation.
--from-assistantOnly items the assistant herself emitted.
--noteworthyOnly items flagged as noteworthy.
--limit <n>Default 20, max 200.
--offset <n>Pagination offset. Combine with --limit to walk older pages.
Examples
bash
# What's outstanding right now (defaults: skip dismissed, newest first)
assistant notifications list --json

# Everything you've shown the user today
assistant notifications list --after 2026-05-28T00:00:00Z --all --json

# Only high-stakes items
assistant notifications list --urgency high --urgency critical --json

# Pre-send dedupe: anything you already surfaced for this conversation
assistant notifications list --conversation-id 7fab234c --after 2026-05-28T00:00:00Z --json

# Walk older pages
assistant notifications list --limit 20 --offset 20 --json
Response shape
json
{
  "ok": true,
  "items": [
    /* FeedItem records: id, title?, summary, status, urgency?, category?, conversationId?, createdAt, ... */
  ],
  "total": 12,
  "returned": 3,
  "hasMore": true,
  "updatedAt": "2026-05-28T10:30:00.000Z"
}

Editing Notifications

Use edit when an already-sent notification needs revising — a typo in the body, a status update on something you previously surfaced (e.g. "in progress" → "done"), or de-escalating the urgency of a stale alert. Prefer editing over re-sending: a fresh notification with the corrected text creates duplicate noise in the user's inbox and pings them twice.

bash
assistant notifications edit --id <notif:uuid> --message "Corrected body"
Finding the id

The id field is the full notif:<uuid> printed by notifications list --json under items[].id. Bare uuids (without the notif: prefix) are also accepted.

bash
assistant notifications list --json | jq '.items[] | {id, title, summary}'
Command Reference
FlagRequiredDescription
--id <id>YesFeed item id (notif:<uuid>) or bare uuid
--message <text>No*New body — updates the home-feed summary AND the delivered channel message where supported
--title <text>No*New short headline (≤ 8 words)
--urgency <level>No*Change urgency (low/medium/high/critical). Feed-only — does not re-push channel messages
--status <state>No*Lifecycle transition (new/seen/acted_on/dismissed). Feed-only
--jsonNoMachine-readable JSON

*At least one of --message, --title, --urgency, or --status must be supplied.

Channel behavior
ChannelEdit behavior
Home feed (macOS/iOS inbox)Always updated when the item exists.
SlackUpdated in-place via chat.update when the original delivery captured a Slack ts. Deliveries older than this feature returned messageId: null and report outcome: "unsupported".
Push, email, SMSCannot be edited — reported as outcome: "unsupported" in the result.
Response shape
json
{
  "ok": true,
  "feedItem": {
    "id": "notif:...",
    "title": "...",
    "summary": "...",
    "status": "new",
    "urgency": "low"
  },
  "channels": [
    { "channel": "slack", "deliveryId": "...", "outcome": "updated" },
    {
      "channel": "platform",
      "deliveryId": "...",
      "outcome": "unsupported",
      "reason": "platform adapter does not support in-place edits"
    }
  ]
}

outcome values: "updated" (channel message edited successfully), "unsupported" (channel cannot edit at all), "skipped" (delivery wasn't in sent status), "failed" (channel-side error — see reason).

Examples
bash
# Fix a typo in the body
assistant notifications edit \
  --id notif:abc12345-... \
  --message "Backup completed — 12.4 GB archived to cold storage."

# De-escalate an urgent alert that resolved itself
assistant notifications edit --id notif:abc12345-... --urgency low

# Dismiss a notification you previously surfaced
assistant notifications edit --id notif:abc12345-... --status dismissed

Important

  • Do NOT use AppleScript display notification or other OS-level notification commands for assistant-managed alerts. Always use assistant notifications send.
  • For a digest, summary, or report that should land in a specific chat or email destination, use messaging_send. It reaches Gmail and Outlook as a draft, and posts to a Slack, Telegram, Discord, or WhatsApp chat through that channel's own transport, where the post is recorded.
  • For the user's notification inbox and connected push channels, use assistant notifications send and pass the complete authored body as --message. The pipeline keeps that body. Do not rewrite it into a short alert first. A scheduled run should also pass --source-channel scheduler.
  • Send notifications that fire immediately with no delay capability. For one-time future alerts, use schedule_create with fire_at. For recurring alerts, use schedule_create with an expression (cron/RRULE).

© vellum-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/notifications of vellum-ai/vellum-assistant.

Open the folder on GitHubat commit 33cc983

Compare with similar skills

Notifications next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Notifications compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Notifications this skillvellum-ai/vellum-assistant1.4k—~3.8kAutomated safety check: PassMIT
Sending NotificationsPostHog/posthog40k—~2kAutomated safety check: PassCustom licence
Unified Notifications Opsaffaan-m/ECC276k1 repos~1.4kAutomated safety check: PassMIT
Unified Notifications Opsaffaan-m/ECC276k—~829Automated safety check: PassMIT
Unified Notifications Opsaffaan-m/ECC276k—~603Automated safety check: PassMIT
Send Notificationindranilbanerjee/digital-marketing-pro8621 repos~3kAutomated safety check: PassMIT

Similar skills

  • Sending Notifications

    PostHog/posthog

    Official

    How to send real-time in-app notifications from PostHog backend code.

    40k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Operate notifications as one ECC-native workflow across GitHub, Linear, desktop alerts, hooks, and connected communication surfaces.

    276k GitHub starsUsed in 1 repo~1.4k tokens
    Data & AnalyticsAuto-check passed
  • GitHub、Linear、デスクトップアラート、フック、接続された通信インターフェースを網羅する、統合されたECCネイティブワークフローとして通知を運用する。真の問題がアラートルーティング、重複排除、エスカレーション、またはインボックス崩壊である場合に使用する。

    276k GitHub stars~829 tokensUpdated yesterday
    Auto-check passed
  • 将通知作为统一的 ECC 原生工作流进行操作,涵盖 GitHub、Linear、桌面提醒、钩子以及连接的通信界面。当真正的问题是告警路由、去重、升级或收件箱崩溃时使用。

    276k GitHub stars~603 tokensUpdated yesterday
    Auto-check passed
  • Send Notification

    indranilbanerjee/digital-marketing-pro

    Send a team notification to Slack or Intercom by urgency tier, approval-gated.

    862 GitHub starsUsed in 1 repo~3k tokens
    Auto-check passed
  • Send

    yc-software/qm

    Make a PR, wait for CI with bounded transport retries, independently review, and merge only when all gates pass.

    15k GitHub stars~1.5k tokensUpdated today
    Auto-check passed

More from vellum-ai/vellum-assistant

All 108 skills in this repo
  • Vellum GitHub App Setup

    vellum-ai/vellum-assistant

    Create and configure a GitHub App so the assistant can push commits, open PRs, and comment under its own bot identity.

    1.4k GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Discord App Setup

    vellum-ai/vellum-assistant

    Connect a Discord bot to the assistant via the Discord Gateway with guided application creation and intent configuration

    1.4k GitHub stars~4.2k tokensUpdated yesterday
    Auto-check passed
  • Sentry App Setup

    vellum-ai/vellum-assistant

    Create and configure a Sentry internal integration so the assistant can manage issues, alerts, and releases under its own identity

    1.4k GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Memory Corpus Ingest

    vellum-ai/vellum-assistant

    Ingest a large dataset into memory as a skimmed map. An agent skill from vellum-ai/vellum-assistant.

    1.4k GitHub stars~3k tokensUpdated yesterday
    Auto-check: notes
  • Plugin Builder

    vellum-ai/vellum-assistant

    A skill your agent uses when the user wants to build, scaffold, ship, or edit a Vellum plugin that bundles multiple surfaces (hooks, tools, skills, and more) into one installable package.

    1.4k GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Slack App Setup

    vellum-ai/vellum-assistant

    Connect a Slack app to the Vellum Assistant via Socket Mode.

    1.4k GitHub stars~2.5k tokensUpdated yesterday
    Auto-check: warnings

Questions about Notifications

What does Notifications do?

Send notifications through the unified notification router. An agent skill from vellum-ai/vellum-assistant. Notifications is an agent skill from vellum-ai/vellum-assistant.

How do I install Notifications in Claude Code?

Run `npx skills add vellum-ai/vellum-assistant --skill notifications -a claude-code`. Or copy the skill folder (skills/notifications in vellum-ai/vellum-assistant) into .claude/skills/notifications in your project. Claude Code loads it when a task matches its description.

How do I install Notifications in Codex?

Run `npx skills add vellum-ai/vellum-assistant --skill notifications -a codex`. Or copy the skill folder (skills/notifications in vellum-ai/vellum-assistant) into .agents/skills/notifications in your project. Codex loads it when a task matches its description.

Can I use Notifications in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vellum-ai/vellum-assistant --skill notifications -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/notifications, .gemini/skills/notifications, .github/skills/notifications and .opencode/skills/notifications in your project.

What does Notifications need to run?

Going by SKILL.md and its folder, Notifications needs the command-line tools its instructions call (jq). Compatibility (from SKILL.md): Designed for Vellum personal assistants.

Does Notifications access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Notifications safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Notifications use?

Notifications is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Notifications use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Notifications?

Skills that share tags, products or a category with Notifications: Sending Notifications (PostHog/posthog, 40k stars), Unified Notifications Ops (affaan-m/ECC, 276k stars), Unified Notifications Ops (affaan-m/ECC, 276k stars) and Unified Notifications Ops (affaan-m/ECC, 276k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Notifications?

vellum-ai (a GitHub organization) maintains it in vellum-ai/vellum-assistant, which has 1,408 GitHub stars. The repository holds 108 skills in this directory. The repository was last updated on October 9, 2026.

Source: vellum-ai/vellum-assistant on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.