Outlook Graph
Microsoft 365 mail and calendar, from the terminal
Read, search, send and manage mail and calendars without leaving your agent. It also turns a PST archive into searchable markdown with a SHA256 chain of custody over every message, which is the half that came out of a real client handover.
Install Outlook Graph
Add the DBHQ marketplace, once
/plugin marketplace add dbhq-uk/marketplaceInstall the skill
/plugin install outlook-graph@dbhq
Both commands work in Claude Code and in Codex. The marketplace is a public repository you can read first: dbhq-uk/marketplace (external site)
What it is good at
Reply-all by default
A reply preserves every original To: and Cc: recipient, so nobody is silently dropped from a thread. Trim to sender-only when you actually mean to. Losing a recipient by accident is invisible from your side; sending to one person too many is not.
Reading the whole message, never the preview
The skill is instructed to open the full body end to end before summarising or replying, so a deadline, an attachment or a request buried below the fold does not get missed.
Anchoring time against the real clock
It resolves "today", "tomorrow" and "by EOD" against the actual date and tracks BST against UTC, so scheduled sends and deadline arithmetic come out right. Calendar times are wall-clock in a timezone it names rather than assumes.
Turning a box of mail into something searchable
A second skill ships in the same install and works offline on files alone: it converts a PST export or exported live mail into markdown with a SHA256 chain of custody over every message. It needs no credentials and makes no network calls.
Formatting that survives Outlook
Markdown drafts convert to clean HTML with the Microsoft 365 Aptos font stack and inline styles, including per-paragraph margins, so what lands in the recipient's client is what you wrote.
What it does not do
It will not send anything off one instruction
Drafting and sending are different verbs, and so are creating an event and inviting anyone to it. An agent driving a mailbox is one confident inference away from mailing a client, and the gap is where a person gets to look.
It cannot reach another mailbox
It asks for five permissions and no more - Mail.ReadWrite, Mail.Send, Calendars.ReadWrite, User.Read and offline_access - all delegated. Nothing tenant-wide, nothing that reaches a colleague's mail, and no admin consent to obtain.
The preferred PST backend will not install on new Python
It pins an old numpy and cannot resolve on Python 3.12 or later. Setup picks a 3.9 to 3.11 interpreter when one exists, and otherwise builds without that backend and tells you so rather than failing silently.
It does not run on native Windows
Linux, macOS and WSL. The live half needs the Azure CLI, jq and curl; pandoc is optional and only for markdown-formatted mail.
Read it before you install it
Every line is public and MIT licensed. The README is the long version of this page, including the parts that are still rough.