Skip to content
Back to skills

Handling Mail

ASecurity

Use when a Letterbox doorbell arrives, or when working an agent inbox — reading, replying, filing, and keeping the operational view usable

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 26, 2026
ai-agentsgodocumentation

Works with

  • cli

Security analysis

A100/100

Scanned September 26, 2026

npx -y skills add SimonMallas/agent-letterbox-cmux --skill handling-mail --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Handling Mail?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Handling Mail
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/simonmallas-handling-mail/badge)](https://www.skillsdirectory.com/skills/simonmallas-handling-mail)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: handling-mail
description: Use when a Letterbox doorbell arrives, or when working an agent inbox — reading, replying, filing, and keeping the operational view usable
---

# Handling mail

You have a Letterbox inbox. This is how to work it.

## When a doorbell arrives

Run `letterbox check` first — not a directory listing.

`check` is the operational view: open work with live items first, stale work
last, unacknowledged markers, and progress notes with their age. A directory
listing shows you filenames and none of that.

Then `letterbox read <ref>` for the letter itself. A `<ref>` is a full id, a
display id (`timestamp · token`), or a unique 8-hex token.

**Read the reference off the letter. Do not construct it.** Ids are built from
a timestamp, the subject slug and a token, and reconstructing one from a
remembered subject produces a plausible id that does not exist. The error says
"message not found", which reads like a missing letter rather than a wrong
reference.

## Answering

| you are | command |
|---|---|
| accepting work, starting it | `letterbox reply <id> ack <slug>` |
| finished | `letterbox reply <id> result <slug>` |
| declining, or cannot | `letterbox reply <id> nack <slug>` |
| still working, no news needed | `letterbox progress <id> "<one line>"` |

Body from stdin. **ACK is not completion** — it leaves the letter open and
says work has started. Only `result` or `nack` closes it. A request with
`requires_ack: false` may answer once with `result` or `nack` and skip the ACK.

## Filing, and why it matters

A non-task letter closes only when you `letterbox file <ref>`. Nothing files
itself.

**Do this as you go.** Letters that are never filed stay open forever, and an
inbox where everything is open cannot tell you what needs you — at which point
`check` stops being usable and you fall back to listing files, which shows you
none of what it would have.

## Sending

`letterbox send <to> <type> <slug> [--now]`, body from stdin. `--now` rings.

**Ring when you send.** The bell is how the recipient learns the letter
exists; without it a letter sits in a mailbox nobody knows about. Durability
means a failed bell is recoverable rather than a lost message — it does not
mean the bell was unnecessary.

A successful ring means a line reached a surface, never that anyone read it.
`no_live_surface` means you could not reach or validate a usable target from
where you are — not that the recipient has stopped. Read the reason given and
your edition's setup documentation; do not relaunch anything on the strength of
it. The letter has landed regardless.

Submission is opt-in on every edition via `LETTERBOX_<PLATFORM>_SUBMIT=1`. With
it off the behaviour differs by platform — a notification on cmux and Herdr, a
status-line message on tmux, and on Zellij no ring at all.

## Scope and honesty

- `read` is your own inbox only. It will not scan paths or other mailboxes.
- Never send a synthetic or test letter into a real mailbox. If you must probe
  behaviour, aim it at a letter you authored, in a disposable root.
- There are no read receipts and no proof of wake-up. If you need to know
  something was acted on, the evidence is the reply.

## Edition differences — check before you instruct

- `token <8hex>` (glance status: unhandled / filed / unknown) is in all four
  current sources. An older installed copy will reject it as unknown — update
  rather than work around it, and do not infer availability from a version
  number. **Its scope differs**: cmux, Herdr and Zellij look across every
  mailbox; tmux looks only in your own inbox and processed folder.
- `doorbell-line`, `doorbell-parse`: **cmux and Zellij** only.
- Everything else in this skill is present on all four editions.

Do not write instructions that assume a verb, or a scope, the reader's edition
does not have.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…