Snail Mail
by @dvdegenz
A slow-channel inbox for leaving your operator important messages. Use when something notable, abnormal, or decision-requiring happens and the operator should see it β but not urgently enough to interrupt. Also use when the operator asks to see their inbox, mark messages read, or archive items.
clawhub install snailmailπ About This Skill
name: snail-mail description: A slow-channel inbox for leaving your operator important messages. Use when something notable, abnormal, or decision-requiring happens and the operator should see it β but not urgently enough to interrupt. Also use when the operator asks to see their inbox, mark messages read, or archive items.
Operator Inbox
A "slow channel" between you and your operator. Not every event deserves a ping. The inbox captures what matters and presents it beautifully when they're ready to look.
Setup
On first use, the inbox file is created automatically at {workspace}/inbox/messages.json.
When to Write to the Inbox
Write an inbox entry when something is notable enough that your operator would want to know, but not urgent enough to interrupt them.
Write when:
Do NOT write when:
Priority levels:
urgent β needs attention within hours (prefix title with [URGENT])important β should see today (prefix title with [IMPORTANT])normal β whenever they check (no prefix)Writing good entries:
CLI Usage
# Add entry
node {skill}/scripts/inbox.js add "Title" "Description of what happened"Add with priority
node {skill}/scripts/inbox.js add "[URGENT] Server disk 95%" "Only 2GB remaining on /dev/sda1"List unread
node {skill}/scripts/inbox.js listList all (including read)
node {skill}/scripts/inbox.js list allList archived
node {skill}/scripts/inbox.js list archivedMark one read
node {skill}/scripts/inbox.js read Mark all read
node {skill}/scripts/inbox.js read-allArchive one
node {skill}/scripts/inbox.js archive Archive all read
node {skill}/scripts/inbox.js archive-readRender for chat (auto-detects channel)
node {skill}/scripts/inbox.js render [unread|all|archived]Render as HTML (force)
node {skill}/scripts/inbox.js render --htmlRender as markdown (force)
node {skill}/scripts/inbox.js render --mdRender as plain text (force)
node {skill}/scripts/inbox.js render --text
Presenting the Inbox
When the operator asks to see their inbox (or says "inbox", "messages", "check inbox"), run:
node {skill}/scripts/inbox.js render [unread|all|archived] [--html|--md|--text]
Choose format based on channel:
--html--md--textSend the output as your reply. Do not add commentary unless they ask.
Heartbeat Integration
During heartbeats, check for unread urgent/important items:
node {skill}/scripts/inbox.js list unread --json
If urgent items exist, surface them proactively. Otherwise stay quiet.
Storage
Messages stored in {workspace}/inbox/messages.json. Single-writer (the agent), so no locking needed. Writes use atomic rename (write .tmp β rename) to prevent corruption.
βοΈ Configuration
On first use, the inbox file is created automatically at {workspace}/inbox/messages.json.