Reads the macOS notification center database and exports recent notifications to markdown files. Also supports automated **work notification summary** with filtering and delivery.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add Lord1Egypt/awesome-skill-forge --skill macos-notification-reader --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Macos Notification Reader?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/lord1egypt-macos-notification-reader)More formats (shields.io, HTML) on the badges page.
# 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.
```bash
# 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 Settings** → **Privacy & Security** → **Full 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
```bash
# 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)
```bash
# 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:
```bash
crontab -e
# Add this line:
*/30 * * * * /path/to/macos-notification-reader/scripts/work-summary.sh
```
Or use OpenClaw's built-in cron:
```bash
openclaw cron add --name "Work Notification Summary" --every "30m" --message "Run work-summary.sh"
```
## Scripts
| Script | Purpose |
|--------|---------|
| `read_notifications.py` | Core script - reads raw notifications from database |
| `export-notification.sh` | Exports all notifications to markdown |
| `work-summary.sh` | Filters 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
```markdown
# 工作通知摘要
- 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 ID | Display Name |
|-----------|--------------|
| com.tencent.xinWeChat | WeChat |
| com.microsoft.teams2 | Teams |
| com.microsoft.Outlook | Outlook |
| com.apple.mail | Mail |
| com.apple.mobilesms | iMessage |
| com.apple.ical | Calendar |
| com.apple.reminders | Reminders |
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](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
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!