Start each workday with a read-only inbox briefing
Use this workflow when you want an agent to reduce a busy inbox to a short action list, but you do not want unattended automation changing or sending mail.
The workflow uses the email skill to read recent messages and writes its
briefing to workflow output and history. Its prompt forbids sending mail or
changing mailbox state; the read-only policy gates commands.
1. Connect the mailbox
Jazz’s email skill uses Himalaya, a local CLI for IMAP and SMTP accounts. Configure it interactively before scheduling anything:
brew install himalaya
himalaya account configure default
himalaya envelope list --folder INBOX --page-size 5
Linux users can install Himalaya with their package manager or its documented Cargo installation. Use an account credential limited to the mailbox this agent needs.
2. Create the agent and workflow
Run jazz agent create, name the agent inbox-assistant, and select your provider
and model. Keep execute_command available so it can call Himalaya, and select
the email skill.
Create ~/.jazz/workflows/morning-inbox/WORKFLOW.md:
---
name: morning-inbox
description: "Summarize recent mail that needs my attention"
schedule: "0 8 * * 1-5"
agent: inbox-assistant
autoApprove: read-only
maxIterations: 40
maxDurationMs: 300000
skills:
- email
---
# Morning inbox briefing
Use the email skill to inspect messages received in the last 24 hours.
Return a concise briefing with these sections:
1. **Reply today**: direct questions, commitments, approvals, and time-sensitive requests.
2. **Action without reply**: bills, security alerts, forms, or tasks with a deadline.
3. **Read when possible**: relevant human updates that require no action.
4. **Noise count**: counts only for newsletters, automated notifications, and marketing.
For every item in the first two sections, include sender, subject, requested action, and any explicit deadline. Quote no more message content than needed to justify the classification.
When uncertain, keep the message visible and label the uncertainty. Never send, reply, forward, delete, archive, move, mark read, or change flags. Do not write a separate summary file; return the briefing as the workflow result.
Jazz classifies each Himalaya command before applying the workflow’s read-only policy. Test the workflow against your mailbox before scheduling it.
3. Test with the unattended policy
Run the same policy the scheduler will use:
jazz workflow run morning-inbox --auto-approve
What you should see
A briefing in the four sections the prompt asked for, and nothing else:
## Reply today
- Priya Raman - "Contract redline v3" - asks you to confirm clause 7.2 by Friday 17:00.
- billing@fastly.com - "Card declined" - payment retry fails in 3 days.
## Action without reply
- URSSAF - Q1 declaration form, due 2026-04-30.
## Read when possible
- Marc - trip photos, no action.
## Noise count
41 newsletters, 12 automated notifications, 6 marketing.
Two things to check beyond the content. jazz workflow history morning-inbox should record the run, and the mailbox should be untouched: same unread count, nothing archived. If a read command is declined, inspect the proposed command rather than raising the entire policy.
Do not add himalaya broadly to autoApprovedCommands: Jazz keys that allowlist by binary and first subcommand, and a broad entry can authorize more mailbox actions than this briefing needs.
4. Schedule it
jazz workflow schedule morning-inbox
jazz workflow scheduled
Jazz installs the workflow through launchd on macOS or cron on Linux. The machine must
be awake at the scheduled time; scheduled runs explains
catch-up behavior and always-on hosts. To receive the briefing remotely, configure a
notification target and add deliver: <target-name>
to the workflow frontmatter.
Read Email and calendar, Scheduled runs, and Tools and approvals.