Skip to content
Back to skills

Check Inbox

ASecurity

Check Outlook inbox and update daily note with message summary

  • 52 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 9, 2026
businessbashnodegit

Works with

  • cli

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add DavidROliverBA/ArchitectKB --skill check-inbox --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Check Inbox?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Check Inbox
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/davidroliverba-check-inbox/badge)](https://www.skillsdirectory.com/skills/davidroliverba-check-inbox)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: check-inbox
context: fork
model: haiku
description: Check Outlook inbox and update daily note with message summary
---

# Skill: Check Inbox

**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:

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

For other filters:
```bash
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`:
```bash
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`):

```markdown
## 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

| Filter | CLI Flag | Description |
|--------|----------|-------------|
| `unread` | `--filter unread` | Unread messages only (default) |
| `flagged` | `--filter flagged` | Flagged messages only |
| `to-me` | `--filter to-me` | Messages addressed directly to me |
| `has-files` | `--filter has-files` | Messages with attachments |
| `mentions-me` | `--filter mentions-me` | Messages where I'm @mentioned |
| `calendar-invites` | `--filter calendar-invites` | Meeting invites only |
| `all` | `--filter all` | All 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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…