| name | email-monitor |
| description | AI inbox classification + Telegram notification |
Email Monitor
Automatic pipeline: Gmail -> AI classification -> CRM activities -> PM tasks -> draft replies -> Telegram
When to use
- "what's new in email?" / "email status"
- "show email summary for today"
- "check email monitor"
- "show draft replies"
- Runs automatically every hour via launchd
Pipeline
email_monitor.py → Gmail API, extracts full body
↓ JSON (stdout)
email_agent.py → AI classification (claude CLI haiku)
↓ actionable emails JSON (stdin)
email_action_agent.py → CRM + PM + drafts + git commit + Telegram
Paths
| What | Path |
|---|
| Monitor tool | $GOOGLE_TOOLS_PATH/email_monitor.py |
| Classify agent | $GOOGLE_TOOLS_PATH/email_agent.py |
| Action agent | $GOOGLE_TOOLS_PATH/email_action_agent.py |
| State | $GOOGLE_TOOLS_PATH/data/email_monitor_state.json |
| Summaries | $GOOGLE_TOOLS_PATH/data/email_summaries/ |
| Drafts | $GOOGLE_TOOLS_PATH/data/email_drafts/ |
| Agent log | $GOOGLE_TOOLS_PATH/data/email_agent_log.json |
| LaunchAgent | ~/Library/LaunchAgents/com.yourcompany.email-monitor.plist |
How to run
Full pipeline
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_agent.py
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_agent.py --dry-run
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_agent.py --no-ai
Monitor only (without classification)
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_monitor.py
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_monitor.py --pretty
rm $GOOGLE_TOOLS_PATH/data/email_monitor_state.json
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_monitor.py --since 2h
Action agent only (with prepared JSON)
$GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_action_agent.py --file input.json
echo '<json>' | $GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_action_agent.py --dry-run
echo '<json>' | $GOOGLE_TOOLS_PATH/.venv/bin/python3 $GOOGLE_TOOLS_PATH/email_action_agent.py --no-draft
View results
cat $GOOGLE_TOOLS_PATH/data/email_summaries/$(date +%Y-%m-%d).md
ls $GOOGLE_TOOLS_PATH/data/email_drafts/
cat $GOOGLE_TOOLS_PATH/data/email_drafts/2026-02-09_task-055.txt
launchctl list | grep email-monitor
Classification
| Category | Action Agent action |
|---|
| URGENT | Activity + draft |
| REPLY_NEEDED | Activity + draft |
| INFO | Activity only |
| SPAM | Skipped |
Note (2026-03-02): Task creation is DISABLED. Sales follow-ups are tracked in leads.csv via next_action. pm_tasks is for dev/project tasks only. To re-enable task creation, uncomment the block in email_action_agent.py around line 420.
Action Agent: what it does
- Match contact -- looks up the sender in
people.csv (email), fallback by domain in companies.csv
- Log activity -- adds a row to
activities.csv (type: email, direction: inbound)
Create task -- DISABLED. Was: adds a row to pm_tasks_master.csv
- Draft reply -- generates a draft via
claude -p --model haiku, saves to data/email_drafts/
- Git commit -- auto-commits in $PROJECT_ROOT (activities only)
- Telegram notify -- summary with drafts to Saved Messages
Unknown contacts are tagged with unknown-contact -- need to be added to CRM.
CRM files (read/write)
$CRM_PATH/contacts/people.csv
$CRM_PATH/contacts/companies.csv
$CRM_PATH/activities.csv
Related skills
email-send-direct -- single email
email-send-bulk -- mass email sending
daily-briefing -- morning overview (reads email summaries)
log-activity -- manual activity logging
telegram-session -- if Telegram notifications are not working