Agent skill · Audited from source
Messaging
skill · vellum-ai/vellum-assistantMIT licenceAudited 14 Oct 2026 · source 19bc86343b63
Is it safe? No — BLOCK, grade D (69/100). We read this skill's source at commit 19bc86343b63 and observed filesystem access and no hard-coded secrets. The audit raised 12 findings, 1 critical or high. What it does: Read, search, send, and manage messages across Gmail, Outlook, Telegram, and other platforms
Cite
Cite this page
ModelsAtlas. “Messaging (vellum-ai/vellum-assistant)”. Retrieved 14 Oct 2026. https://modelsatlas.com/skills/vellum-ai/messaging
Blocked. The page stays public so you can check this skill if someone recommended it to you. The audit found 1 critical or high finding, starting with “Prompt injection” in SKILL.md:17. Do not install it without reading them.
Trust audit
Audit 0.4.1 · source read 14 Oct 2026
BLOCK means the audit found something that could harm you or your machine. Grade D is shared by 642 of 14,816 audited skills.
What the source does
- FilesystemDeclared5 observations
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 5 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | PASS | 5 |
L2 Instructions | Prompt injection, authority framing, hidden directives | FAIL | 2 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: critical finding, no behavioural pass, undeclared transfer.
Findings (12)
CRITICALPrompt injectionprompt.transfer_instruction · SKILL.md:17
**On a channel, `messaging_send` posts through the channel's own transport.** Slack, Telegram, Discord, and WhatsApp all go out that way: threaded where you name a `thread_id`, rendered the way a repl
- Why
- an instruction to move sensitive data to an outside destination
- Fix
- remove; a skill never needs the user's secrets off the machine
LOWInventory / provenanceinv.symlink · assistant/CLAUDE.md
assistant/CLAUDE.md
- Why
- link not followed
- Fix
- —
LOWInventory / provenanceinv.symlink · assistant/src/approvals/CLAUDE.md
assistant/src/approvals/CLAUDE.md
- Why
- link not followed
- Fix
- —
LOWInventory / provenanceinv.symlink · assistant/src/notifications/CLAUDE.md
assistant/src/notifications/CLAUDE.md
- Why
- link not followed
- Fix
- —
LOWInventory / provenanceinv.symlink · assistant/src/runtime/CLAUDE.md
assistant/src/runtime/CLAUDE.md
- Why
- link not followed
- Fix
- —
LOWInventory / provenanceinv.symlink · gateway/CLAUDE.md
gateway/CLAUDE.md
- Why
- link not followed
- Fix
- —
LOWFilesystem / pathfs.traversal · tools/messaging-analyze-style.ts:4
import { extractStylePatterns } from "../../../../messaging/style-analyzer.js";- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · tools/messaging-analyze-style.ts:5
import { getMemoryDb } from "../../../../persistence/db-connection.js";- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · tools/messaging-analyze-style.ts:9
} from "../../../../persistence/jobs-store.js";
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · tools/messaging-analyze-style.ts:10
import { memoryGraphNodes } from "../../../../persistence/schema/index.js";- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · tools/messaging-analyze-style.ts:11
import { clampUnitInterval } from "../../../../plugins/defaults/memory/validation.js";- Why
- No further detail recorded for this rule.
- Fix
- —
INFOPrompt injectionprompt.conditional_escalation · SKILL.md:146
- Notifications are sent via the **notifications** skill (always active) using `assistant notifications send` in `bash` -- use it when the user asks for an alert/notification (for example "send this a
- Why
- No further detail recorded for this rule.
- Fix
- —
Audit 0.4.1 · source sha 19bc86343b63 · 14 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publishervellum-ai GitHub organizationOwner of the repository this skill is read from
- Source foldervellum-ai/vellum-assistant/assistant/src/config/bundled-skills/messagingThe exact folder we audited
- LicenceMITAs the repository states it
- Commit pinned for this verdict19bc86343b63A new audit runs when the source changes
- Repository statusNot archivedLast push 1 day ago
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Read, search, send, and manage messages across Gmail, Outlook, Telegram, and other platforms
---
name: messaging
description: Read, search, send, and manage messages across Gmail, Outlook, Telegram, and other platforms
compatibility: "Designed for Vellum personal assistants"
metadata:
emoji: "\U0001F4AC"
vellum:
display-name: "Messaging"
category: "messaging"
activation-hints:
- "Email, messaging, inbox management, read/send/search on any platform"
- "Handles credential flows -- do not improvise setup instructions"
---
You are a unified messaging assistant with access to multiple platforms (Gmail, Outlook, Telegram, and more). Use the messaging tools to help users read, search, organize, draft, and send messages across all connected platforms.
**On a channel, `messaging_send` posts through the channel's own transport.** Slack, Telegram, Discord, and WhatsApp all go out that way: threaded where you name a `thread_id`, rendered the way a reply is, and recorded in the chat's conversation once the channel acknowledges the post. Reading and searching Slack are not part of this skill; load the **slack** skill, which uses the Slack Web API for those.
## External Identity
When composing messages on behalf of your user to external recipients, refer to yourself as an "assistant" (not "AI assistant"). Use your user's name and pronouns from their user persona file (`users/<slug>.md`). Don't volunteer that you are an AI unless directly asked.
For Email management (archive, label, triage, declutter), load the **gmail** or **outlook** skill. For email sequences, load the **sequences** skill.
## Email Routing Priority
When the user mentions "email" - sending, reading, checking, decluttering, drafting, or anything else - **always default to the user's own email** unless they explicitly ask about the assistant's own email address (e.g., "set up your email", "send from your address", "check your inbox"). The vast majority of email requests are about the user's Gmail or Outlook, not the assistant's @vellum.me address.
Do not offer the assistant's own email as an option unless the user specifically asks. If Gmail and Outlook are not connected, guide them through setup.
Reading, searching, or summarizing the user's inbox is a **messaging task** — use the messaging tools (or the Gmail connection flow below if nothing is connected). Never run `assistant channels` commands for a mailbox request: channels are the assistant's own inbound delivery routes, not the user's mailbox, and inspecting them sends you down the wrong path.
When a platform is connected (auth test succeeds), always use the messaging API tools for that platform. Never fall back to browser automation, shell commands (bash, curl), or any other approach for operations that messaging tools can handle. The messaging tools handle authentication internally - never try to access tokens or call APIs directly. Browser automation is only appropriate for initial credential setup (OAuth consent screens), not for day-to-day messaging operations.
On Gmail and Outlook, `messaging_send` creates a real mailbox draft for review. It does not send. Recipients are optional on Outlook: if the user has not named a To address, still create the draft (use a non-email `conversation_id` such as `drafts`) and tell them only after the tool returns a draft ID. If draft creation fails or is interrupted, say so and offer the email copy in chat. Do not claim a draft exists until the tool succeeds.
**On a channel, the send goes out as the assistant's own bot**, so `account` does not apply and is refused. It carries text only: attachments stay on Gmail and Outlook. The post is recorded in the chat's conversation, which is what lets `recall` find it later.
## Connection Setup
Before using any messaging tool, verify that the platform is connected by calling `messaging_auth_test` with the appropriate `platform` parameter. If the call fails with a token/authorization error, follow the steps below.
### Public Ingress (required for Telegram)
Telegram setup requires webhook routing, but it does **not** always require ngrok. Before suggesting public ingress for Telegram, check managed callback availability with `assistant platform status --json`. If that reports `available: true` with a non-empty `assistantId`, use the platform callback route flow and do not prompt for ngrok; this applies to managed pods and platform-connected local assistants alike, so do not require `isPlatform: true`. Only use the **public-ingress** skill for local assistants that genuinely need a public gateway URL. Slack uses Socket Mode and does not require public ingress. Gmail/Outlook on the desktop app uses a loopback callback and does not require public ingress; the channel path (Path B in the vellum-oauth-integrations skill) handles public ingress internally when needed.
### Email Connection Flow
When the user asks to "connect my email", "set up email", "manage my email", or similar - and has not named a specific provider:
1. **Discover what's connected.** Call `messaging_auth_test` for `gmail`or `outlook` (and any other email-capable platforms). If one succeeds, tell the user it's already connected and proceed with their request.
2. **If nothing is connected**, ask which provider they use - but keep it brief and conversational (e.g., "Which email do you use - Gmail, Outlook, etc.?"), not a numbered list of options with descriptions.
3. **Once the provider is known, act immediately.** Don't present setup options or explain OAuth. If it's Gmail or Outlook, follow the sections below. For any other provider, let the user know that only Gmail and Outlook are fully supported right now, and offer to set up Gmail/Outlook instead.
### Gmail
1. **Check the connection.** Run `assistant oauth status google`. If a connection exists, the user is ready to go — proceed with their request.
2. **If no connections are found, render the connect button in one step:** call `ui_show` with `surface_type: "oauth_connect"` and `data.providerKey: "google"`. That surface is alwaysExcerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit 19bc863
git clone https://github.com/vellum-ai/vellum-assistant git -C vellum-assistant checkout 19bc86343b63
The author documents no install command, so this uses the repository directly. Our verdict covers commit 19bc86343b63 only.
Works in
The author has not said which agents this skill supports, and we have not tested it in any.
Audit history
Every audit, every source change
- ✕BLOCK D 69 / 100
first audit · source
19bc86343b63
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/vellum-ai/messaging/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
All coding & review skills →vellum-ai/vellum-assistant
Set up, authenticate, and run external coding agents (Claude Code, Codex) via the Agent Client Protocol
vellum-ai/vellum-assistant
Shop on Amazon and Amazon Fresh through your browser
vellum-ai/vellum-assistant
Record and analyze API surfaces of web services
vellum-ai/vellum-assistant
Build and edit small, personal visual tools and artifacts — dashboards, trackers, calculators, data visualizations, charts, simple landing pages, and slide decks the user wants for THEMSELVES. This is the right skill…
vellum-ai/vellum-assistant
Drive a specific named macOS app via raw input bypassing the Accessibility tree
vellum-ai/vellum-assistant
Import conversation history from ChatGPT into Vellum
Add this badge to your README
[](https://modelsatlas.com/skills/vellum-ai/messaging/)
<a href="https://modelsatlas.com/skills/vellum-ai/messaging/"><img src="https://modelsatlas.com/skills/vellum-ai/messaging/badge.svg" alt="ModelsAtlas: BLOCK D"></a>
Questions about Messaging
What does the Messaging skill do?
Is Messaging safe to install?
What can Messaging access on my machine?
How current is this page?
Sources
- github.com/vellum-ai/vellum-assistant/tree/main/assistant/src/co — the audited source at commit 19bc86343b63 and every finding aboveObserved · 14 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the Messaging skill do?
- Is Messaging safe to install?
- What can Messaging access on my machine?