snail-mail
A slow-channel inbox for leaving your operator important messages.
Setup & Installation
Install command
clawhub install dvdegenz/snail-mailIf the CLI is not installed:
Install command
npx clawhub@latest install dvdegenz/snail-mailOr install with OpenClaw CLI:
Install command
openclaw skills install dvdegenz/snail-mailor paste the repo link into your assistant's chat
Install command
https://github.com/openclaw/skills/tree/main/skills/dvdegenz/snail-mailWhat This Skill Does
A persistent inbox for agents to leave operators non-urgent but notable messages. The agent writes entries when something warrants attention later, not immediately. The operator checks on their own schedule.
Separates signal from noise by batching non-urgent events into a structured inbox instead of interrupting the operator mid-task with every minor occurrence.
When to Use It
- Flagging a payment approval that only a human can authorize
- Recording an unexpected error pattern spotted during a background task
- Logging a high-value account mention for the operator to follow up
- Noting a product milestone the operator would want to know about
- Surfacing an urgent server alert during the next heartbeat check
View original SKILL.md file
# 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`.
Requires: `node` (Node.js runtime).
## 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:
- **Needs decision** — something only a human can resolve (payment, approval, policy)
- **Abnormal** — errors, failures, unexpected patterns, security events
- **Interesting** — notable engagement, media mentions, milestones, opportunities
- **FYI** — context that might matter later but needs no action now
### Do NOT write when:
- Routine success ("cron ran fine", "heartbeat OK")
- Something you already told them in chat
- Trivial events with no lasting significance
- Duplicate of something already in the inbox
### 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:
- **Title:** Short, scannable. Include the WHO or WHAT. ("@bigaccount (500K) mentioned us", not "Social media event")
- **Message:** 1-3 sentences. What happened, why it matters, what (if anything) needs doing. Include links/handles when relevant.
## CLI Usage
```bash
# 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 list
# List all (including read)
node {skill}/scripts/inbox.js list all
# List archived
node {skill}/scripts/inbox.js list archived
# Mark one read
node {skill}/scripts/inbox.js read <id>
# Mark all read
node {skill}/scripts/inbox.js read-all
# Archive one
node {skill}/scripts/inbox.js archive <id>
# Archive all read
node {skill}/scripts/inbox.js archive-read
# Render for chat (auto-detects channel via OPENCLAW_CHANNEL)
node {skill}/scripts/inbox.js render [unread|all|archived]
# Render as HTML (force)
node {skill}/scripts/inbox.js render --html
# Render as markdown (force)
node {skill}/scripts/inbox.js render --md
# Render 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:
```bash
node {skill}/scripts/inbox.js render [unread|all|archived] [--html|--md|--text]
```
Choose format based on channel:
- **Telegram, webchat** → `--html`
- **Discord, Slack** → `--md`
- **SMS, plain** → `--text`
Send the output as your reply. Do not add commentary unless they ask.
## Heartbeat Integration
During heartbeats, check for unread urgent/important items:
```bash
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.
Environment variables:
- `OPENCLAW_WORKSPACE` — base directory for inbox storage (defaults to `$HOME`)
- `OPENCLAW_CHANNEL` — used by `render` auto-format detection (telegram/discord/slack/webchat)
Example Workflow
Here's how your AI assistant might use this skill in practice.
User asks: Flagging a payment approval that only a human can authorize
- 1Flagging a payment approval that only a human can authorize
- 2Recording an unexpected error pattern spotted during a background task
- 3Logging a high-value account mention for the operator to follow up
- 4Noting a product milestone the operator would want to know about
- 5Surfacing an urgent server alert during the next heartbeat check
A slow-channel inbox for leaving your operator important messages.
Security Audits
These signals reflect official OpenClaw status values. A Suspicious status means the skill should be used with extra caution.
Similar Skills
VIEW ALLAgent Browser
A fast Rust-based headless browser automation CLI.
babyconnect
ActiveCampaign CRM integration for lead management, deal tracking.
bits
Control browser automation agents via the Bits MCP server.
testskillx
Simple test skill that calls a GET endpoint to fetch a daily post.