Before Angelos put my inbox behind MCP, I built the local version: a Go command-line interface for iCloud Mail. I wanted an agent with a shell to work through the mailbox, including the parts that make email more than a list of subjects: threads, replies, CC and BCC, attachments, folders, and the state around sending.
The command is icloud, but Mail is the implemented service today. The command tree leaves room for Contacts, Calendar, and Reminders later; Mail is what works today.
Small results until the task needs more
The CLI synchronizes mail for local search and also offers an explicit fresh provider search. Discovery stays compact; full message bodies, attachments, and exact EML are separate reads. Stable message, conversation, attachment, and draft IDs give an agent something precise to carry between commands. Text is readable at a terminal, JSON works for structured parsing, and JSONL fits streams or per-item results.
That distinction matters for a mailbox. Most questions start with finding the right message, not reading every message. Keeping those steps separate reduces the amount of email content the agent has to hold just to decide what to open next.
A reply is a workflow, not just an SMTP call
I gave sending the same explicit shape as the rest of the tool: preview a reply with a dry run, send the reviewed version with an idempotency key, then inspect operation history or Outbox recovery if something goes wrong. The wider command tree covers drafts, aliases, signatures, folder organization, import/export, and S/MIME operations, with icloud capabilities describing what the installed binary actually supports.
It authenticates with an Apple app-specific password and can manage multiple named accounts. The local CLI is useful on its own; the mail work here also gave me the groundwork for Angelos, where an assistant can reach an existing mailbox without a shell on my computer.
