Morning Briefing Skill
Run a unified daily status check across all systems. Output a concise dashboard.
Steps
1. Unread Emails
Check unread count across accounts via IMAP. Do NOT read message bodies, only count.
import imaplib
accounts = [
# ("email@example.com", "app-password", "imap.gmail.com"),
]
for email, pw, server in accounts:
try:
m = imaplib.IMAP4_SSL(server)
m.login(email, pw)
m.select("INBOX", readonly=True) # readonly preserves unread status
_, data = m.search(None, "UNSEEN")
count = len(data[0].split()) if data[0] else 0
print(f"{email}: {count} unread")
m.logout()
except Exception as e:
print(f"{email}: ERROR {e}")
Use readonly=True (or BODY.PEEK[] for message reads) to preserve unread status.
2. Open GitHub Issues
# Switch to project account, list issues
# gh-<project>
gh issue list --state open --limit 20 2>/dev/null | head -20
3. Active Workplans
find ~ -name "WORKPLAN-*.md" -mtime -30 2>/dev/null | sort
4. Todos
cat ~/path/to/todos.md 2>/dev/null
5. System Health (Abbreviated)
# Docker containers
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null
# Orphan check
pgrep -f "chrome-headless-shell|remotion|playwright" | wc -l
Output Format
Present as a concise dashboard table:
## Morning Briefing - YYYY-MM-DD
### Unread Email
| Account | Unread |
|-----------------------|--------|
| work@example.com | 3 |
| personal@example.com | 0 |
### Open GitHub Issues
| Project | Count | Top Issue |
|------------|-------|-------------------------|
| my-project | 4 | #125 Critical bug (P0) |
### Active Workplans
- WORKPLAN-20260315-feature.md (12d ago)
### Todos
[contents of todo file]
### System Health
| Container | Status |
|------------|---------|
| my-app | Up 3d |
Orphan processes: 0
Keep it scannable. No prose. Tables and bullets only.