CtrlK
BlogDocsLog inGet started
Tessl Logo

markusdowne/agentmail

Give AI agents their own email inboxes using the AgentMail API. Use when building email agents, sending/receiving emails programmatically, managing inboxes, handling attachments, organizing with labels, creating drafts for human approval, or setting up real-time notifications via webhooks/websockets. Supports multi-tenant isolation with pods.

95

1.07x
Quality

93%

Does it follow best practices?

Impact

100%

1.07x

Average score across 4 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-2/

{
  "context": "Tests whether the solver preserves the exact AGENTMAIL_API_KEY credential boundary, warns but does not fall back to AGENTMAIL_KEY, uses the current AgentMail draft create/send call shapes, and stays truthful about offline execution.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Reads AGENTMAIL_API_KEY exactly",
      "description": "The script reads AGENTMAIL_API_KEY as the required credential source.",
      "max_score": 20
    },
    {
      "name": "Does not silently fall back to AGENTMAIL_KEY",
      "description": "The script does not use AGENTMAIL_KEY as an automatic fallback for apiKey.",
      "max_score": 20
    },
    {
      "name": "Warns about nearby AGENTMAIL_KEY alias",
      "description": "If AGENTMAIL_KEY is present, the script emits a warning that it is only an unverified nearby alias and is not being auto-used.",
      "max_score": 10
    },
    {
      "name": "Correct SDK import",
      "description": "The script imports from agentmail and uses AgentMailClient.",
      "max_score": 10
    },
    {
      "name": "Correct draft create call shape",
      "description": "The scaffold shows client.inboxes.drafts.create(inboxId, request) rather than an older or invented draft API shape.",
      "max_score": 15
    },
    {
      "name": "Correct draft send call shape",
      "description": "The scaffold shows client.inboxes.drafts.send(inboxId, draft.draftId).",
      "max_score": 10
    },
    {
      "name": "Fails fast when AGENTMAIL_API_KEY missing",
      "description": "The script exits or throws clearly and non-optimistically when AGENTMAIL_API_KEY is absent.",
      "max_score": 10
    },
    {
      "name": "Offline truthfulness preserved",
      "description": "The script clearly indicates that it is a dry-run / offline scaffold and does not claim a real draft was created or sent.",
      "max_score": 5
    }
  ]
}

evals

SKILL.md

tile.json