agentleFS
ai-ecoverseai-ecoverse/skills/skills/outlook/SKILL.md

outlook

Skill1 starsChanged 30 days agoApache-2.0View on GitHub

Interact with Microsoft Outlook (Office 365) — read inbox, search mail, view calendar events, send email, and produce aggregated inbox items for the monday dispatcher. Uses the live Outlook browser session via MSAL token extraction from localStorage. Triggers on requests involving Outlook, email, inbox, calendar, meetings, sending mail, checking unread messages, or monday inbox aggregation that includes Outlook data.

We split this skill into the rules it gives an agent

2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 8 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Re-run without --dry-run: only after that confirmation.

    line 92
  2. Very specific:

    Prefer naming explicit ids — outlook accept <id1> <id2> — over --all whenever only some pending events should get the same response.

    line 106

“Common” is measured: kept by at least 6 in 10 of the 8 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Outlook

Direct API access to Microsoft Outlook. The CLI extracts an MSAL token from an open outlook.office.com browser tab when available, and falls back to a saved token file so commands keep working without a tab open. If a command reports it cannot get a token, open Outlook in the browser and retry.

Full flag-by-flag reference: references/COMMANDS.md. Implementation notes: references/internals.md.

Quick start

# Inbox
outlook mail --limit 10
outlook mail --unread
outlook mail --search "quarterly report"
outlook view <message-id|conversation-id>
outlook thread <message-id|conversation-id>   # who is on this chain

# Calendar (times are shown in the mailbox timezone, named in the header)
outlook calendar
outlook calendar --date 7d
outlook calendar --date 7d --json          # ids for the commands below

# One event in full: invite body, Teams/Webex join info, recurrence
outlook event <event-id>
outlook event <event-id> --json

# Respond — always dry-run first, see "Responding to invitations" below
outlook decline <event-id> --dry-run
outlook decline <event-id> --comment "Conflict"

# Send mail
outlook send --to user@example.com --subject "Hello" --body "Message body"

# Monday aggregation (unread mail + upcoming calendar)
outlook monday --limit 20

Who is on a thread

An Outlook web URL — …/mail/inbox/id/<id> — carries a conversation id, not a message id. view and thread both accept either, so paste whichever you have.

outlook thread lists every message oldest-first with its own sender, To and Cc. Recipients are per message, never merged — in a forwarded or re-Cc'd chain they genuinely differ, which is usually the answer you want.

outlook thread <conversation-id>           # previews
outlook thread <message-id> --full         # complete bodies
outlook thread <conversation-id> --json    # from/to/cc/bcc, ts, ids per message

Getting meeting join details

outlook calendar lists events and prints each event id. Feed that id to outlook event for the whole invite plus a structured Join info block (join URL, meeting ID, passcode, video tenant key and video ID, dial-in number and phone conference ID — whichever the invite actually contains).

outlook calendar --date 7d                 # copy the id: line of the event
outlook event <event-id>                   # human-readable
outlook event <event-id> --json            # .conferencing has the parsed fields
outlook event <occurrence-id> --series     # the series, not this occurrence

outlook view is for mail only; given an event id it says so and points here.

Responding to invitations

accept, decline and tentative email the organizer, and --all and --series act on events you did not name individually. Always dry-run first:

  1. Dry-run. Re-run your exact command with --dry-run added. Nothing is sent.
  2. Confirm the printed list is what you intended — for --series, check the resolved series-master id; for --all, check every event listed.
  3. Re-run without --dry-run only after that confirmation.
  4. Verify with outlook calendar --date 7d --limit 100 --json that response changed for the intended events only.
# Whole recurring series, from any occurrence id
outlook decline <occurrence-id> --series --dry-run
outlook decline <occurrence-id> --series

# Everything still unanswered in a window
outlook tentative --all --date 7d --dry-run
outlook tentative --all --date 7d

Prefer naming explicit ids — outlook accept <id1> <id2> — over --all whenever only some pending events should get the same response.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.