email-processor
✓Verified·Scanned 2/19/2026
Automate Gmail inbox processing - categorizes unread emails, marks marketing/newsletters/promotions as read, and surfaces important emails requiring attention.
USE WHEN: User asks to "check my emails", "process unread emails", "clean up my inbox", "mark newsletters as read", or any Gmail automation task.
REQUIRES: gog CLI (brew install steipete/tap/gogcli) + Google Cloud OAuth credentials
from clawhub.ai·v5363786·7.3 KB·0 installs
Scanned from 1.0.0 at 5363786 · Transparency log ↗
$ vett add clawhub.ai/zaynjarvis/email-processor
Email Processor
Automates Gmail inbox triage by categorizing unread emails and marking low-priority items as read.
What It Does
- Fetches all unread emails
- Identifies marketing, newsletters, promotions, and news
- Marks low-priority emails as read
- Surfaces important emails (GitHub, security alerts, direct communications)
- Generates a summary report
Prerequisites
1. Install gog CLI
brew install steipete/tap/gogcli
Verify installation:
gog --version
2. Google Cloud OAuth Setup
- Go to Google Cloud Console
- Create a new project (or use existing)
- Enable the Gmail API:
- Navigate to "APIs & Services" > "Library"
- Search for "Gmail API" and enable it
- Create OAuth credentials:
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth client ID"
- Select "Desktop app" as application type
- Download the JSON file
3. Authenticate gog
# Set credentials
gog auth credentials /path/to/client_secret.json
# Add your Gmail account
gog auth add your@gmail.com --services gmail
# Verify
gog auth list
Usage
Quick Process
bash ~/.openclaw/workspace/skills/email-processor/scripts/process-emails.sh
Manual Processing (via Codex)
-
Fetch unread emails:
gog gmail search 'is:unread' --json --max 100 -
Mark specific thread as read:
gog gmail thread modify <thread-id> --remove UNREAD --force -
Mark marketing emails (batch):
gog gmail search 'is:unread' --json --max 100 | \ jq -r '.threads[] | select(.labels | contains(["CATEGORY_PROMOTIONS"])) | .id' | \ while read id; do gog gmail thread modify "$id" --remove UNREAD --force; done
Email Categories
Auto-Marked as Read
CATEGORY_PROMOTIONS- Promotional emails[Superhuman]/AI/News- Newsletters[Superhuman]/AI/Marketing- Marketing emails[Superhuman]/AI/Pitch- Cold outreach/pitches[Superhuman]/AI/AutoArchived- Auto-categorized low priority
Preserved (Important)
- GitHub notifications (PRs, issues, security alerts)
- Direct personal communications
- Financial/transaction emails
- Security alerts
- Calendar invites
Verification
Check setup is working:
# Test gog connectivity
gog gmail search 'is:unread' --max 5
# Check account
gog auth list
# Test modify (dry run - just list what would be marked)
gog gmail search 'is:unread' --json --max 10 | \
jq -r '.threads[] | select(.labels | contains(["CATEGORY_PROMOTIONS"])) | {id: .id, subject: .subject}'
Troubleshooting
| Issue | Solution |
|---|---|
gog: command not found | Run brew install steipete/tap/gogcli |
authentication required | Run gog auth credentials and gog auth add |
token expired | Run gog auth refresh your@gmail.com |
Gmail API not enabled | Enable at https://console.cloud.google.com/apis/library/gmail.googleapis.com |
| Rate limit errors | Add delays between requests or reduce batch size |
Labels Reference
Gmail automatically applies these labels:
CATEGORY_PERSONAL- Personal emailsCATEGORY_SOCIAL- Social notificationsCATEGORY_PROMOTIONS- PromotionsCATEGORY_UPDATES- Updates/notificationsCATEGORY_FORUMS- Forum messagesIMPORTANT- Marked importantUNREAD- Unread status
Superhuman AI labels (if using Superhuman):
[Superhuman]/AI/News- Newsletters[Superhuman]/AI/Marketing- Marketing[Superhuman]/AI/Pitch- Pitches[Superhuman]/AI/AutoArchived- Auto-archived