Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add terry-li-hm/skills --skill "check-channels"
Install specific skill from multi-skill repository
# Description
Unified sweep of WhatsApp, LinkedIn DMs, and Gmail for new messages. Use when user says "check messages", "any replies?", "check channels", or wants to see if anyone reached out.
# SKILL.md
name: check-channels
description: Unified sweep of WhatsApp, LinkedIn DMs, and Gmail for new messages. Use when user says "check messages", "any replies?", "check channels", or wants to see if anyone reached out.
user_invocable: true
Check All Channels
Sweep WhatsApp, LinkedIn, and Gmail in parallel to surface new messages—especially useful during job hunt when replies can come from anywhere.
Trigger
Use when:
- User asks "any messages?" or "any replies?"
- User says "check channels" or "check messages"
- Morning briefing needs message status
- User returns from AFK and wants to catch up
Workflow
Run Gmail CLI and WhatsApp check in parallel, then browser for LinkedIn.
1. WhatsApp (wacli)
# Check connection first
wacli doctor | grep CONNECTED
# If CONNECTED=false, reconnect:
wacli sync & # runs in background, takes ~10s
# List recent chats (unread count NOT available in JSON output)
wacli chats list --limit 15 --json | jq '.data[] | {name: .Name, last: .LastMessageTS}'
Limitation: wacli doesn't expose unread count. Show recent chats and let user identify what needs attention based on timestamps.
2. LinkedIn DMs (browser automation)
Use Claude in Chrome:
1. Navigate to linkedin.com/messaging
2. Read page with depth 8-10
3. Look for conversations where last message is NOT "You:" prefix
4. Check for unread badge in nav (e.g., "5 unread")
Key elements to find:
- Nav badge: generic "X unread" near Messaging link
- Conversation list: messages starting with contact name (not "You:") = incoming
3. Gmail (gog CLI)
# Search unread, excluding noise
gog gmail search "is:unread -category:promotions -category:social -from:[email protected]" --max 10
Priority keywords to flag: interview, offer, recruiter, following up, schedule
Output Format
## Message Check (HKT timestamp)
**WhatsApp** — Connected ✓
- Recent: [list recent chats with timestamps]
- [Note any that look like they need response based on timing]
**LinkedIn** — X unread (or "0 unread")
- [List conversations with incoming messages]
- Flag recruiters/job-related
**Gmail** — X unread (filtered)
- ⚠️ [urgent items first]
- [other items]
---
Priority: [Highlight job-hunt related messages needing response]
Error Handling
| Channel | If fails | Fallback |
|---|---|---|
| CONNECTED=false | Run wacli sync &, wait 10s, retry |
|
| "Not authenticated" | Tell user to run wacli auth |
|
| Login wall | Use Claude in Chrome with active session | |
| Gmail | CLI error | Use Gmail MCP tools |
Integration
/morningskill calls this as part of daily briefing- Can be run standalone anytime
- Results can feed into
/messageskill for drafting replies
Cautions
- LinkedIn browser automation takes 5-10 sec
- WhatsApp requires prior
wacli authsetup - WhatsApp unread count not available — rely on timestamps and "You:" prefix detection
- Gmail filters out promotions/social by default
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.