Marketplace / Briefings

Mail

Mail reads the person's recent inbox, lists what needs a reply, the commitments made by them or to them and the deadlines in it, and saves reply drafts in their Drafts for them to send.

  • Drafts, never sends
  • Models via ContextStream
  • Runs on a schedule
  • Reads your mail

What it does

Reads your recent mail and writes a digest of what needs a reply, the commitments made and the deadlines coming, and saves reply drafts for you to send. It never sends anything.

What it does not do

It does not do these. A task like them is declined, and a declined run is free:

  • Sending, forwarding, moving, archiving or deleting mail, or marking it read: it changes nothing in the mailbox but the drafts it saves.
  • Writing new messages: it drafts replies to mail that came in, to the people who wrote.
  • Reading anything on the web, following links in mail, or opening attachments.
  • Remembering mail in the workspace: the digest is the run's result and nothing else.

Real runs

What Mail did with a real input: the input, the result (shortened where it is long), how long it took, what it cost, and where it ran. Each live run used public or demo material only. An example marked as from the eval suite is not a live run.

Mail never runs live for this site: a live run reads a real mailbox. The example comes from the agent's eval suite, where the mailbox is a fixture.

From the eval suite, not a live run

A daily digest of a fixture mailbox (eval case)

Agent
mail@0.1.0
Outcome
succeeded
Ran
2026-10-27 17:17 UTC
Took
Not timed (fakes)
Cost
No charge (offline)

The agent's offline eval suite: its real program, against a fake ContextStream holding a fixture mailbox, a scripted model, with no network. Not a live run.

  • evals/mail/cases.jsonl in the Slipstream repository
Input
{
  "window_hours": 48,
  "as_of": "2026-10-16T18:00:00Z"
}

Result

Summary

7 messages in the last 48 hours: 2 need a reply, 2 commitments, 2 deadlines; 2 drafts saved for you to send. Dana needs the seat count by Tuesday for the renewal, and Sam wants an answer today about Wednesday's interview panel.

Needs a reply

  • Interview panel on Wednesday?, from Sam Okafor <[email removed]>: Sam asks whether you can join Wednesday's interview panel and needs an answer today. (high urgency, draft saved)
  • Renewal quote for 2027, from Dana Ruiz <[email removed]>: Dana needs the seat count confirmed for the 2027 renewal quote. (high urgency, draft saved)

Commitments

  • You: Send Lee the migration runbook by 2026-10-19. “I'll send you the migration runbook by Monday.”
  • They: Northwind holds the current price of $48 per seat by 2026-10-31. “We will hold the current price of $48 per seat until October 31.”

Deadlines

  • Confirm the seat count to Northwind: 2026-10-20. “Could you confirm the seat count by Tuesday, October 20”
  • Pay CloudHost invoice INV-2291: 2026-10-30. “Your invoice INV-2291 for $412.00 is due on October 30, 2026.”

The digest (Markdown)

# Mail digest, 2026-10-16

7 messages in the last 48 hours: 2 need a reply, 2 commitments, 2 deadlines; 2 drafts saved for you to send. Dana needs the seat count by Tuesday for the renewal, and Sam wants an answer today about Wednesday's interview panel.

## Needs a reply

- **Urgent: Sam Okafor**, "Interview panel on Wednesday?": Sam asks whether you can join Wednesday's interview panel and needs an answer today. Draft saved in Drafts.
- **Urgent: Dana Ruiz**, "Renewal quote for 2027": Dana needs the seat count confirmed for the 2027 renewal quote. Draft saved in Drafts.

## Commitments

- You: Send Lee the migration runbook (by 2026-10-19). "Re: Postgres migration"
- Dana Ruiz: Northwind holds the current price of $48 per seat (by 2026-10-31). "Renewal quote for 2027"

## Deadlines

- 2026-10-20: Confirm the seat count to Northwind. From Dana Ruiz, "Renewal quote for 2027"
- 2026-10-30: Pay CloudHost invoice INV-2291. From CloudHost Billing, "Invoice INV-2291 is due October 30"
---

Read 7 messages in full of 7 messages in [email removed]. Nothing was sent, moved or marked read.
Checks: 4 of 4 passed
  • Passed: mail_read: Read 7 messages in full of 7 messages in the window.
  • Passed: grounded: Every commitment and deadline quotes its message.
  • Passed: drafts: 2 saved in Drafts, 0 not saved.
  • Passed: no_sends: Sent nothing, and moved, deleted or marked nothing: drafts wait in Drafts for you.
  • Email addresses are removed.

Provenance

Eval case
evals/mail/cases.jsonl, daily-digest
Depot run
0zb9r381xr

Example inputs

Inputs from the agent’s own job contract, each checked against its input schema.

The daily digest: the last 24 hours of every mailbox, with up to three reply drafts saved.

{}
ss run mail

A weekly digest with no drafts.

{
  "window_hours": 168,
  "drafts": 0
}
ss run mail window_hours:=168 drafts:=0

Looks at the Northwind renewal thread first and drafts short replies.

{
  "mailbox": "ada@acme.dev",
  "focus": "anything from Northwind about the renewal",
  "reply_style": "short, signed Ada"
}
ss run mail mailbox=ada@acme.dev focus='anything from Northwind about the renewal' reply_style='short, signed Ada'

Declined: it never sends; the person sends the drafts.

{
  "focus": "send the replies for me"
}
ss run mail focus='send the replies for me'

Input

FieldTypeWhat it is
mailboxstringThe mailbox to read. Defaults to every mailbox you have, up to three.
window_hoursintegerHow far back to read, in hours. Defaults to 24; a weekly digest uses 168.
max_messagesintegerHow many of the newest inbox messages to look at in each mailbox. Defaults to 40.
draftsintegerHow many reply drafts to save in your Drafts, at most. 0 saves none. Defaults to 3.
reply_stylestringHow the drafts should read, for example "short and friendly, signed Ada".
focusstringWhat to look at first, for example "anything from Acme about the renewal".
dry_runbooleanPut the drafts in the digest without saving them.
as_ofstringRead the window as of this time instead of now.

Where it runs

Model agent. A program on ContextStream’s model proxy, with a short-lived token that acts for you in one workspace.

It may run for up to 5 min before it is stopped. You may schedule it to run on its own.

ContextStream scopeWhat it lets a run do
mail.readRead your own mailboxes, without marking anything read.
mail.draft.writeSave a few reply drafts in your Drafts, to the sender of the message answered. Never sends.
model.invokeCall models through ContextStream’s model proxy, under the run’s credit cap.

Evals

13 of 13 offline eval cases pass for version 0.1.0 (baseline saved 2026-10-18). Offline means fakes and fixtures, with no network: the cases check what the agent guarantees, such as declining work that is not its job. They are not measurements of live runs; the live runs above are.