Skill: Check Inbox

SkillDocs & knowledge

Check Outlook inbox and update daily note with message summary

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Skill: Check Inbox skill

What this skill tells your AI

The instructions your AI receives, as published by davidroliverba/architectkb in .claude/skills/check-inbox/SKILL.md and read by ahel’s review.

Command: /check-inbox Model: Haiku (coordinator) / any (note creation) Agent: main

Description

Check Outlook inbox for unread messages using Playwright. Extracts sender, subject, time, and flags from the DOM, then optionally updates the daily note with an inbox summary.

Prerequisites

  • Playwright installed (@playwright/test in devDependencies)
  • Microsoft Edge installed
  • Authenticated session (run npm run inbox:check without --headless once to authenticate)

Usage

/check-inbox                    # Check unread messages (default)
/check-inbox flagged            # Check flagged messages
/check-inbox all                # Check all messages (no filter)
/check-inbox to-me              # Messages addressed directly to me
/check-inbox --no-daily         # Don't update daily note

Workflow

Step 1: Capture inbox data

Run the inbox check script:

node .claude/scripts/outlook-inbox.js --headless

For other filters:

node .claude/scripts/outlook-inbox.js --headless --filter flagged
node .claude/scripts/outlook-inbox.js --headless --filter all
node .claude/scripts/outlook-inbox.js --headless --filter to-me

This outputs:

  • JSON message data at .claude/logs/inbox-messages-{filter}-{timestamp}.json
  • Screenshot at .claude/logs/inbox-screenshot-{filter}-{timestamp}.png

If the script fails with "Session expired", re-run without --headless:

node .claude/scripts/outlook-inbox.js

Step 2: Read and present results

  1. Find the most recent inbox JSON file:
    .claude/logs/inbox-messages-unread-*.json
    
  2. Read the JSON and screenshot
  3. Present to the user as a summary table:
Inbox — 3 unread messages (10:56 AM)

| Sender               | Subject                       | Time     | Flags   |
|----------------------|-------------------------------|----------|---------|
| Alex Johnson  | Accepted: What is AlertHub   | 10:05 AM | MEETING |
| Chris Taylor      | Re: Pen re-test               | 9:57 AM  |         |
| Udemy Business       | New courses are waiting...    | 10:30 AM |         |

Step 3: Match senders to vault

For each message, search for matching Person notes:

  • Search People/*.md files for sender name matches
  • If found, link to the Person note in the summary
  • If not found, note the sender as unlinked

Step 4: Update daily note (unless --no-daily)

Add or update an ## Inbox section in today's daily note (Daily/YYYY/YYYY-MM-DD.md):

## Inbox

**3 unread** at 10:56 AM

- **Accepted: What is AlertHub** — [[Alex Johnson|Alex Johnson]] (10:05 AM) [MEETING]
- **Re: Pen re-test** — Chris Taylor (9:57 AM)
- **New courses are waiting for you!** — Udemy Business (10:30 AM)

Rules for the daily note update:

  • If an ## Inbox section already exists, replace it with the latest data
  • Place it after ## Meetings and before ## Notes
  • Link senders to Person notes where they exist
  • Include flags in brackets: [MEETING], [ATTACH], [FLAG]

Step 5: Suggest actions (optional)

If the user asks, suggest actions for each message:

  • Meeting acceptances → link to the meeting note if it exists
  • External emails (CAUTION banner) → flag for attention
  • Flagged messages → create Task notes if needed

Available Filters

FilterCLI FlagDescription
unread--filter unreadUnread messages only (default)
flagged--filter flaggedFlagged messages only
to-me--filter to-meMessages addressed directly to me
has-files--filter has-filesMessages with attachments
mentions-me--filter mentions-meMessages where I'm @mentioned
calendar-invites--filter calendar-invitesMeeting invites only
all--filter allAll messages (no filter)

Scheduling

Inbox checks run automatically via launchd at 9:00, 12:00, and 15:00 on weekdays.

  • Job: com.vault.inbox-check
  • Script: .claude/scripts/outlook-inbox.js --headless
  • Logs: .claude/logs/inbox-check.log

The JSON output accumulates in .claude/logs/ — the skill always reads the most recent file.

Authentication

Same persistent browser context as calendar sync (.claude/browser-data/, gitignored). If the session expires during a scheduled run, the next interactive /check-inbox will prompt for re-authentication.

Related Skills

  • [[.claude/skills/sync-calendar/SKILL.md|/sync-calendar]] — Calendar sync (same Playwright approach)
  • [[.claude/skills/daily/SKILL.md|/daily]] — Daily note creation
  • [[.claude/skills/email/SKILL.md|/email]] — Process individual emails into vault notes

Signals

GitHub stars
52
Forks
12
Last commit
Mar 2026
Advanced
Catalog kind
skill
Gateway key
check-inbox
Source
github.com/davidroliverba/architectkb