Atlas / Skills / builderio / Email Drafts

Email DraftsCAUTION

skills/builderio/email-drafts

A framework for building agentic apps

Verdict
CAUTION
Grade
B
Trust score
89 /100
Version
—
Hosts
—
License
—
Stars
7,191
01

Overview

A framework for building agentic apps

Read from source at commit 5977febf67f1OBSERVED · 2026-10-14
Advertisement
02

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: email-drafts
description: >-
  Create, edit, and send email drafts through compose-{id} application state,
  manage-draft, and send-email. Use when composing, replying, forwarding,
  attaching files, applying signatures/writing style, choosing Send + Mark Done,
  or checking open/click tracking on sent mail.
---

# Email Drafts

Create, edit, and manage email drafts. Each draft is stored as an application state entry keyed `compose-{id}`. The UI refreshes through the framework polling/query invalidation path and updates the compose panel automatically.

## Storage

Drafts are stored in the `application_state` SQL table via `writeAppState("compose-{id}", draft)` from `@agent-native/core/application-state`. Each entry is one draft. Multiple drafts can exist simultaneously — they appear as tabs in the compose panel.

## Calling `manage-draft`

`manage-draft`'s call arguments are NOT the stored draft record below — every
call requires a top-level `action`, and `action` decides which other fields
apply:

| `action`       | Other required fields | Notes                                    |
| -------------- | ---------------------- | ---------------------------------------- |
| `create`       | none                    | `id` is optional; the action assigns one when omitted. Recipient/subject/body fields are all optional but should be set to compose real content. |
| `update`       | `id`                    | `id` must be the id returned by a prior `create` call — never invent one. |
| `delete`       | `id`                    | Removes the compose state and its saved mailbox copy. |
| `delete-saved` | `savedDraftId`          | Use when only the saved mailbox copy remains (compose state already closed). |
| `delete-all`   | none                    | Deletes every open compose draft. |

There is no standalone "create draft" tool — `create` is this action's only
entry point for a new draft. Always call `action: "create"` first and use the
`id` it returns for any later `update`/`delete` on that same draft; do not
call `update`/`delete` speculatively before a matching `create`.

To draft a reply to a specific message, create with `mode: "reply"` and
`replyToId` set to that message's id:

```json
{
  "action": "create",
  "to": "[email protected]",
  "subject": "Re: Meeting follow-up",
  "body": "Hi team,\n\nThanks for the great discussion today...",
  "mode": "reply",
  "replyToId": "18d4a2f9e1b2c3d4"
}
```

## Stored Draft Record (`compose-{id}`)

This is the persisted shape of the `compose-{id}` application-state row that
`manage-draft` reads and writes — not the `manage-draft` call arguments above.

```json
{
  "id": "abc123",
  "to": "[email protected]",
  "cc": "",
  "bcc": "",
  "subject": "Meeting follow-up",
  "body": "Hi team,\n\nThanks for the great discussion today...",
  "mode": "compose",
  "replyToId": "",
  "replyToThreadId": ""
}
```

### Fields

| Field             | Type   | Required | Description                                     |
| ----------------- | ------ | -------- | ----------------------------------------------- |
| `id`              | string | yes      | Unique draft ID (must match key suffix)         |
| `to`              | string | no       | Comma-separated recipient email addresses       |
| `cc`              | string | no       | Comma-separated CC addresses                    |
| `bcc`             | string | no       | Comma-separated BCC addresses                   |
| `subject`         | string | no       | Email subject line                              |
| `body`            | string | no       | Email body in **markdown** (see formatting below) |
| `mode`            | string | no       | One of: `"compose"`, `"reply"`, `"forward"` (defaults to `"compose"`) |
| `replyToId`       | string | no       | Message ID being replied to (for reply/forward) |
| `replyToThreadId` | string | no       | Thread ID for grouping (for reply/forward)      |

## Body Formatting

The `body` field uses **markdown**. The compose editor (TipTap) renders it as rich text, and the send flow converts markdown to HTML before sending via Gmail. Use standard markdown syntax:

- **Links:** `[click here](https://example.com)` — renders as a clickable hyperlink in the sent email
- **Bold:** `**bold text**`
- **Italic:** `*italic text*`
- **Lists:** `- item` (unordered) or `1. item` (ordered)
- **Headings:** `# Heading` (h1–h3)
- **Code:** `` `inline code` `` or fenced code blocks
- **Blockquotes:** `> quoted text`
- **Bare URLs:** `https://example.com` auto-links

Do NOT use raw HTML tags — use markdown only.

## Signature and Style Settings

Before creating or rewriting a draft, read the user's drafting settings with `pnpm action get-mail-settings`.

- Use `signature` exactly when it is configured; do not rewrite or duplicate it.
- If no signature is configured, omit the signature. Never derive one from the user's name, email address, or connected profile.
- Follow `writingStyle` when present.
- Keep generated copy natural and specific. Avoid generic AI email tropes, headings, and over-formal filler unless the user asks for that style.

## Updating Durable Drafting Settings

Treat requests to permanently change, add to, or remove a writing-style rule as
settings changes, not drafting requests. Route them to `update-mail-settings`.
Do not call `manage-draft`, open the compose UI, or create a draft unless the user separately asks
to create or edit an email draft.

For a durable settings request:

1. Read the current settings with `get-mail-settings`.
2. Merge the requested rule into the existing `writingStyle`, preserving
   unrelated instructions. For a removal, remove only the requested rule.
3. If the requested change is ambiguous, conflicts with existing guidance, or
   would materially rewrite the style, show the proposed merged wording and
   ask the user to confirm before changing it.
4. Call `update-mail-settings` with the complete merged `writingStyle` value.
5. Re-rea
03

Trust audit

CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeNA
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
none-observed
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (5)

MEDIUMInventory / provenance · inv.symlink · CWE-1104
.agents/skills/an
.agents/skills/an
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.agents/skills/content-product-development
.agents/skills/content-product-development
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.agents/skills/design-exploration
.agents/skills/design-exploration
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.agents/skills/turn-into-app
.agents/skills/turn-into-app
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.agents/skills/visual-edit
.agents/skills/visual-edit
Why it matters. link not followed

Gates applied: no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha 5977febf67f1full audit observations/trust-audit/skill/builderio__email-drafts.json · Report an issue / request a re-scan
04

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-145977febf67f1CAUTIONB89first audit
05

Questions

What does the Email Drafts skill do?

A framework for building agentic apps

Is Email Drafts safe to install?

With care. The audit graded it B (89/100) and found 5 things worth knowing before you trust this skill, listed below with the exact line each was found on.

What can Email Drafts access on my machine?

The audit observed no filesystem, network or shell use at all in its source.

What do I need installed to use Email Drafts?

Its own instructions reference action. Dependencies are pinned to exact versions.

How current is this page?

The grade is for one exact copy of the source (5977febf67f1), read on 2026-10-14. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Email Drafts](https://modelsatlas.com/skills/builderio/email-drafts/badge.svg)](https://modelsatlas.com/skills/builderio/email-drafts/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement