Mail — Gmail
Reads recent mail, including your sent items, because that is where your own promises are. A cheap filter drops the newsletters and the no-reply senders before a model reads anything, then what survives becomes a capture you approve.
The commitments that go missing are not in the notes you remembered to take — they are in the mail you skimmed on a Tuesday and the message that ended in “sure, I'll sort that”. Zephyr connects to where they actually live. Reading is all a connection does on its own; a reply or a calendar change goes out only with its own permission and your approval of that exact change.
Each one reads broadly enough to find a commitment, and connecting one sends nothing to anyone. Gmail and Google Calendar connect read-only; sending a reply or changing your calendar is a separate permission you turn on per account, and even then each one waits for your approval. That is enforced by the scopes Zephyr holds, not by a promise about how it behaves.
Reads recent mail, including your sent items, because that is where your own promises are. A cheap filter drops the newsletters and the no-reply senders before a model reads anything, then what survives becomes a capture you approve.
Reads events and who is on them, so the person brief can arrive before a meeting rather than waiting to be asked for. It does not read event descriptions — those hold dial-in codes and interview notes. A private focus hold, moving a meeting you organise or asking another organiser to move one happens only after you allow calendar changes for that account and approve that exact change.
A Send to Zephyr action on any message. Zephyr sees what you hand it and nothing else: no channel history, no DMs, no bot sitting in the workspace reading along.
A connector may read broadly to find commitments. Anything it would write — a reply, a calendar change — is prepared for a person and happens only once they approve it.
Zephyr never sends a mail, a message or an invite on its own. A reply goes out only after you have allowed sending for that Gmail account and approved the exact message and its recipients, and it is marked sent only when Gmail confirms it. Without that permission, Zephyr drafts and you send from your own mail app. Auto-send is not on the roadmap at any price.
A mail saying “ignore your previous instructions” is a mail with a strange sentence in it. Every payload goes through the same fencing a capture does.
Refresh tokens live server-side, encrypted, reachable only by the function that uses them. The app holds a connection status, never a credential.
Read-only where read-only will do. Connecting asks for gmail.readonly and calendar.readonly; gmail.send and calendar.events are asked for separately, per account, only when you turn on sending or calendar changes. A test fails the build if the reading grant ever asks for more.
One screen lists what is connected, what it last read, and a disconnect that revokes upstream rather than only forgetting locally.
Handing every message to a model would be a bill with no floor, so a deterministic filter runs first and costs nothing: bulk headers, no-reply senders and mail with no commitment language in it are dropped before anything expensive happens.
The bias is deliberately towards reading. A false skip is a commitment Zephyr never saw, which is the one failure the product cannot afford — so the filter rejects things that are structurally not correspondence rather than trying to judge what a sentence means. Judging meaning is the model's job.
Mail also cannot run up a bill on its own. It reads new mail only while you have credits left, and each run reads a bounded number of messages, so a run never fetches mail that nothing could act on.
A connector exists when something reads from it. Until then the row in Settings says “Soon” rather than offering a button that opens a consent screen and lands nowhere.
Outlook mail and calendar are not available. The row says “Soon” until Zephyr can read them end to end; Gmail and Google Calendar are what read today.
Not connected and not offered. Neither gives Zephyr an approved way to read along, so neither appears as a button.
Slack's message action is deliberate and small. Continuously ingesting selected channels is higher value, far higher noise, and a separate opt-in decision.
Two-way sync with the tool your team runs on is a real ask, and the hard part is the mapping, not the API. It needs a per-connection mapping screen first.
The same shape as Slack, and it follows Slack rather than arriving with it.
One webhook in, one out, for the long tail of everything else. Not built.
Zephyr is in development for iOS, Android and the web. Join the early access list.