snail-mail
慢速通道收件箱,用于向操作员留下重要消息。当发生值得注意的、异常的或需要决策的事情并且操作员应该看到它时使用,但又不够紧急而无法中断。当操作员要求查看其收件箱、将消息标记为已读或存档项目时也可使用。
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~dvdegenz-snailmailcURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~dvdegenz-snailmail/file -o dvdegenz-snailmail.md# 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:
- **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)
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.
---
## 中文说明
# Operator Inbox
你与操作员之间的“慢速通道”。并非每个事件都值得发送提醒。收件箱会捕获重要的内容,并在他们准备好查看时以美观的方式呈现。
## Setup
首次使用时,收件箱文件会在 `{workspace}/inbox/messages.json` 自动创建。
## When to Write to the Inbox
当某件事**值得让操作员知道,但又不够紧急到需要打断他们时**,写入一条收件箱条目。
### Write when:
- **Needs decision** — 只有人类才能解决的事情(付款、审批、政策)
- **Abnormal** — 错误、失败、异常模式、安全事件
- **Interesting** — 值得注意的互动、媒体提及、里程碑、机会
- **FYI** — 当下无需行动但日后可能有用的背景信息
### Do NOT write when:
- 例行成功(“cron 正常运行”、“心跳正常”)
- 你已经在聊天中告诉过他们的事情
- 没有持久意义的琐碎事件
- 与收件箱中已有内容重复的内容
### Priority levels:
- `urgent` — 需在数小时内处理(标题前缀加 `[URGENT]`)
- `important` — 当天应当查看(标题前缀加 `[IMPORTANT]`)
- `normal` — 任何时候查看皆可(无前缀)
### Writing good entries:
- **Title:** 简短、易扫读。包含 WHO(谁)或 WHAT(什么)。(写“@bigaccount (500K) mentioned us”,而不是“Social media event”)
- **Message:** 1-3 句话。发生了什么、为何重要、需要做什么(如果需要的话)。相关时附上链接/账号。
## 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)
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
当操作员要求查看收件箱(或说“inbox”、“messages”、“check inbox”)时,运行:
```bash
node {skill}/scripts/inbox.js render [unread|all|archived] [--html|--md|--text]
```
根据通道选择格式:
- **Telegram、网页聊天** → `--html`
- **Discord、Slack** → `--md`
- **短信、纯文本** → `--text`
将输出作为你的回复发送。除非对方要求,否则不要添加任何评论。
## Heartbeat Integration
在心跳期间,检查未读的紧急/重要条目:
```bash
node {skill}/scripts/inbox.js list unread --json
```
如果存在紧急条目,主动呈现它们。否则保持安静。
## Storage
消息存储在 `{workspace}/inbox/messages.json`。单写入者(即代理),因此无需加锁。写入使用原子重命名(先写 .tmp → 再重命名)以防止损坏。