Solutions · Inbox and operations
Triage, replies, follow-ups, and delegation. Staged, in your tone, sent by you.
An operations inbox is a queue that nobody built as one. Razoo reads it through Gmail or IMAP, sorts what needs an owner from what needs a reply, drafts the reply the way you would have written it, and puts every send behind your word. The sorting is what stops needing a model. The sending never does.
What the inbox agent does
Triage, drafts, follow-ups, delegation. Nothing sent unconfirmed.
The example agent in the repository declares them in its domain.yaml and actions.yaml. Every action is auto_confirm false. A person presses Send, and the outbox does the sending.
Inbox triage
Reply drafts
Follow-ups
Time blocks
Delegation
Daily brief
Decisions
Amend the agent
Today
One thing at a time, with the source beside it.
The Today page walks you through what needs you: a drafted reply with the original message underneath, a delegation ready to send, a hold on your calendar. Confirm, edit, or park. Every confirm is a named act recorded on the Decision.
- The draft shows the tone exemplar it followed and the fields it read, so a wrong draft is a wrong rule, not a mystery.
- Edit changes the payload before confirm. The edit is recorded as a correction.
- Park returns the item to the queue untouched. Nothing is dropped and nothing times out into a send.
Arrived today
38
Handled without a model
29
Waiting on you
4
Drafted reply to Priya Nair. Edit it or send as-is.
Brad
tone: declining a meeting · fields: owner=me, due_at=none · capable tier · 610 tokens
Show the original message
Hi Brad, could we get 30 minutes this week to walk through the Q3 numbers before the board pack goes out? Priya
- delegate_taskSam Okafornext
Northgate schedule · due Friday
- time_blockyounext
Thursday 9–11 · board pack review
- send_followupHarbour Buildnext
quiet 14 days · resurfaced by rule
Your tone, in a file
The voice is a playbook, not a prompt you cannot see.
Tone exemplars live in a markdown playbook in the agent folder. The reasoning step reads them under a token contract. You can read them too, change one line, and the change is validated and applied as a staged action. No fine-tuning, no labelling, no hidden system prompt.
- Triage is plumbing over the owner field. It never calls a model. What plumbing cannot resolve queues for you.
- Enrich is the one reasoning step. It runs on the fast or capable tier and stages a draft at most.
- Decide is judgment. Your choices there are the evidence the learned rung is built from.
- commitment_value is money_legal. A draft that would commit money is flagged and never auto-sent.
# How I reply Short. First names. No preamble, no sign-off beyond my name. Answer the question in the first line. Offer a time, not a range. ## Exemplar · declining a meeting > Thanks, Priya. Not this week. If it can wait, Tuesday 2pm works. > Brad ## Exemplar · chasing a commitment > Morning Sam. Where are we on the Northgate schedule? I told them Friday. > Brad ## Never Never commit money or a date on my behalf. Draft it, flag it, I send it.
process: inbox_triage work_types: [ea_inbox, ea_brief] steps: - { id: capture, kind: plumbing, skill: intake.capture } - { id: triage, kind: plumbing, skill: qualify.deterministic, fields: [owner] } - { id: enrich, kind: reasoning, skill: capture.structure } - { id: decide, kind: judgment } - { id: resurface, kind: plumbing, skill: opportunity.resurface }
process from the executive-assistant example agent · playbook illustrative
Mailboxes
Gmail, IMAP, and Microsoft 365. One client interface.
Three transports behind one client interface, polled by an outbox job on the drain loop. Every message enters through the same ingest path as the API and the CLI, with the same limits and the same identity-key stripping.
Gmail
shippedOAuth consent from the CLI, read and send scopes, refresh token stored encrypted and never printed. Incremental sync on the history cursor. Plain fetch, no SDK. Gmail wins when multiple transports are configured.
IMAP
shippedHost, user, and password in the encrypted store, mailbox defaulting to INBOX. UID cursor stored in SQLite so a crashed poll resumes on the next drain. Attachments with a text layer are extracted; images are recorded as not extractable, never dropped. SMTP send completes the pair.
Microsoft 365
shippedA Graph transport behind the same interface: delta queries with a stored cursor, client-credentials and device-code flows, a connector card in the console. Approver notifications by email, Slack, and Teams run beside it.
Idempotent by message id. One message is one work item whichever transport delivered it. An unrouted message lands on the unassigned path, visible on Blockers, never discarded.
every send is a confirmTwo weeks of your inbox. Then see what stopped needing a model.
Design partners connect one mailbox behind their own network. Every reply is staged in their tone and sent by them.