macOS Notification Reader

v1.1.0

Reads recent macOS notifications from the local database and exports them to date-organized markdown files for review and logging.

1· 371· 2 versions· 1 current· 1 all-time· Updated 2h ago· MIT-0

macOS Notification Reader

Reads the macOS notification center database and exports recent notifications to markdown files. Also supports automated work notification summary with filtering and delivery.

Features

  • 📱 Multi-app support: WeChat, Teams, Outlook, Mail, iMessage, Calendar, Reminders, and more
  • Time filtering: Fetch notifications from the last N minutes or hours
  • 📅 Date-organized output: Exports to memory/YYYY-MM-DD/computer_io/notification/
  • 🤖 Cron scheduling: Designed for automated periodic exports
  • 📊 Work notification summary: Auto-filter work-related notifications (Teams/Outlook) and generate summaries
  • 🔒 Privacy-friendly: Reads from local database only, no cloud upload

Quick Start

1. Grant Full Disk Access (Required)

This skill requires Full Disk Access to read the macOS notification database.

# Verify permission
python3 -c "import os; print('OK' if os.access(os.path.expanduser('~/Library/Group Containers/group.com.apple.usernoted/db2/db'), os.R_OK) else 'FAIL')"

If it returns FAIL, follow these steps:

  1. Open System SettingsPrivacy & SecurityFull Disk Access
  2. Click the 🔒 lock and enter your password
  3. Click +, press Cmd+Shift+G, enter /usr/bin/python3, click Open
  4. Ensure the toggle is ON

Note: If using a virtual environment, add the Python binary from that venv instead.

2. Test the Scripts

# Navigate to the skill directory
cd /path/to/macos-notification-reader

# Basic: Read notifications from the last 35 minutes
python3 scripts/read_notifications.py --minutes 35

# Basic: Read notifications from the last 24 hours
python3 scripts/read_notifications.py --hours 24

# Advanced: Generate work notification summary (every 30 min)
bash scripts/work-summary.sh

3. Set Up Cron Jobs (Recommended)

Option A: Basic Notification Export (every 30 min)

# Edit crontab
crontab -e

# Add this line:
*/30 * * * * /path/to/macos-notification-reader/scripts/export-notification.sh

Option B: Work Notification Summary (every 30 min)

This filters work-related notifications (Teams, Outlook) and generates a summary:

crontab -e

# Add this line:
*/30 * * * * /path/to/macos-notification-reader/scripts/work-summary.sh

Or use OpenClaw's built-in cron:

openclaw cron add --name "Work Notification Summary" --every "30m" --message "Run work-summary.sh"

Scripts

ScriptPurpose
read_notifications.pyCore script - reads raw notifications from database
export-notification.shExports all notifications to markdown
work-summary.shFilters work notifications and generates summary

Work Notification Summary

The work-summary.sh script does:

  1. Filters work apps: Teams, Outlook, WeChat (work-related)
  2. Extracts action items: Identifies pending tasks from message content
  3. Generates summary: Creates a structured markdown report
  4. Saves to: memory/YYYY-MM-DD/computer_io/notification/work-summary-YYYYMMDD-HHMMSS.md

Summary Output Format

# 工作通知摘要
- Lookback: 过去 35 分钟
- 总工作通知: 5 条

## 渠道分布
- Teams: 3
- Outlook: 2

## 待处理事项(自动提取)
- [时间] (app) 消息内容摘要

## 最近工作通知(去重后)
- [时间] (app) 消息内容

Output Directory

By default, exports go to:

~/.openclaw/workspace/memory/YYYY-MM-DD/computer_io/notification/

To customize, edit the scripts and change the OUTPUT_DIR variable.

Supported Apps

The script recognizes these apps by default:

Bundle IDDisplay Name
com.tencent.xinWeChatWeChat
com.microsoft.teams2Teams
com.microsoft.OutlookOutlook
com.apple.mailMail
com.apple.mobilesmsiMessage
com.apple.icalCalendar
com.apple.remindersReminders

To add more apps, edit the simplify_app_name() function in read_notifications.py.

Limitations

  • ⚠️ macOS only: This skill only works on macOS
  • ⚠️ Full Disk Access required: Must be granted manually (see above)
  • ⚠️ Limited retention: macOS automatically deletes notifications after ~3-7 days
  • ⚠️ Notification state: Cannot read notifications that have been dismissed

File Structure

macos-notification-reader/
├── SKILL.md                       # This file
├── _meta.json                     # Skill metadata
├── scripts/
│   ├── read_notifications.py      # Core script (file output)
│   ├── export-notification.sh     # Basic export wrapper
│   └── work-summary.sh            # Work notification summary (NEW)
└── references/
    └── permission-setup.md        # Detailed permission guide

Use Cases

  • 📊 Review missed notifications: See what you missed while away
  • 🔍 Debug notification issues: Check if a specific app sent a notification
  • 📝 Daily logging: Automatically archive notifications
  • 💼 Work summary: Get incremental work notification summaries every 30 min
  • 🤖 Automation: Integrate with other tools via markdown output

Troubleshooting

"Permission denied" error

Grant Full Disk Access. See references/permission-setup.md.

"Cannot find notification database"

  • Ensure macOS 15.0 or later
  • Check: ls -la ~/Library/Group\ Containers/group.com.apple.usernoted/db2/

Notifications are empty

  • macOS may have deleted old notifications
  • Try reducing time window: --minutes 10

Author: OpenClaw Community
Version: 1.1.0
Platform: macOS 15.0+
License: MIT

Version tags

automationvk97bsrd532kvk5zcayetvntwbd82bjdjlatestvk97bsrd532kvk5zcayetvntwbd82bjdjmacosvk97bsrd532kvk5zcayetvntwbd82bjdjnotificationsvk97bsrd532kvk5zcayetvntwbd82bjdjproductivityvk97bsrd532kvk5zcayetvntwbd82bjdjwork-summaryvk97bsrd532kvk5zcayetvntwbd82bjdj