Files
research/hermes-automation/gates/email-triage-wakegate.md
T

3.4 KiB

Email Triage — wakeAgent Gate Pattern

A condition-based poller that checks for new actionable email, fires the LLM only when there's unprocessed high-priority mail, and stays silent (zero cost) on empty ticks.

Design

┌─────────────────────────────────────────────────────────────┐
│  cron: every 15m                                            │
│  no_agent=true                                              │
│  script: check-unread-email.sh                              │
├─────────────────────────────────────────────────────────────┤
│  Script output (stdout):                                    │
│   • "" (empty)         → no agent, no delivery ── $0.00     │
│   • "3 unread priority" → gate opens → agent processes      │
└─────────────────────────────────────────────────────────────┘

Implementation

1. Script (scripts/check-unread-email.sh)

#!/usr/bin/env bash
# Silent poller: outputs nothing unless there are actionable unread emails
# Called by cron with no_agent=true — zero token cost on empty ticks
#
# Gate logic:
#   stdout empty = no new email → silent delivery (nothing sent)
#   stdout non-empty = has mail → cron passes it to agent context

source ~/.hermes/profiles/leonard/.env

COUNT=$(himalaya envelope list -f INBOX -a 2>/dev/null | grep -c "UNSEEN" || echo 0)

if [ "$COUNT" -eq 0 ]; then
  exit 0  # silent — no output, no delivery
fi

# Gate opened: output structured context for the agent to process
echo "UNREAD_EMAIL=$COUNT"
echo "TIMESTAMP=$(date -Iseconds)"
echo "---"
himalaya envelope list -f INBOX -a 2>/dev/null | head -20

2. Cron Job (Hermes cron)

hermes cron create \
  -s "email-monitor" \
  --schedule "every 15m" \
  --script ~/.hermes/profiles/leonard/scripts/check-unread-email.sh \
  --no-agent \
  "If the script reports unread emails, summarize the top 3 most important ones with sender, subject, and a one-line action recommendation. Flag anything urgent or time-sensitive. If nothing actionable, deliver nothing."

3. Wake Gate Principle

The gate stays closed (no agent invoked) 95%+ of ticks. The script:

  • Uses no LLM resources (pure shell)
  • Outputs nothing on empty scans → silent delivery (free)
  • Only when email is found does the agent context fire

Key Configuration

Setting Value Reason
schedule every 15m Fast enough for triage, sparse enough to stay cheap
no_agent true Script-only polling — zero token cost per tick
deliver origin Returns to the same chat where created
Script exit 0 with empty stdout Silent — no notification sent

Variants

  • Compliance monitor: Same pattern, replace email check with regulatory RSS/API poll
  • Opportunity scanner: Script scrapes X/HN, gates on fresh high-signal mentions
  • System health: Script checks disk/GPU/memory thresholds, gates only on warnings
  • Skills curator: Script checks skill freshness, gates on skills approaching staleness