Pmail started as a curiosity project: how far can you push an LLM as the primary surface for email.

Tools the agent gets

  • search_inbox(query) — semantic + keyword.
  • read_thread(id) — full thread context.
  • draft_reply(thread_id, intent) — drafts but does not send.
  • schedule_send(draft_id, when) — sends with a 60s undo.
  • label, archive, snooze — cheap operations.

Tools the agent does not get

Anything that touches money, anything that messages a third party for the first time, anything that exposes credentials.

The RAG part is unglamorous

The hardest engineering was the embedding index — keeping it fresh as mail arrives, handling threading correctly.