cloudflare-email-delivery
Deliver Hermes AI Topics reports via Cloudflare Email Service. Setup, cron config, and troubleshooting for email channel.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Deliver Hermes AI Topics reports via Cloudflare Email Service. Setup, cron config, and troubleshooting for email channel.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Comprehensive wiki health checking, maintenance, and remediation — duplicate detection, entity dedup/disambiguation, link auditing/fixing, page splitting, source-linking lint, wikilink remediation, tag taxonomy audit and normalization, pre-commit enforcement, language enforcement (JP→EN bulk translation, detection regex, cron-assisted migration), and decision-matrix-driven cleanup.
Comprehensive wiki maintenance: daily structural health checks (index reconciliation, log separator fixes, pipeline watchdog alerts), comparison page updates (adding items to multi-section comparison tables), and page relocation (moving/renaming pages while maintaining link integrity).
Pre-flight checklist and procedures for archiving, deleting, or migrating Hermes skills. Prevents accidental removal of cron-referenced skills. Covers the 3-layer skill structure and config.yaml management. Includes skill inventory management, promotion workflows, and archival conventions.
Karpathy's LLM Wiki: build/query interlinked markdown KB.
Deep analysis of blog authors' recent thoughts, philosophy, and positions. Goes beyond entity page creation to extract cited ideological positions, track thought evolution, and enable ongoing RSS monitoring for thought updates.
Query the blogwatcher-cli SQLite database for RSS scan results. Use pre-verified column names and query templates to avoid errors.
| name | cloudflare-email-delivery |
| description | Deliver Hermes AI Topics reports via Cloudflare Email Service. Setup, cron config, and troubleshooting for email channel. |
| version | 1.0.0 |
Add email as a delivery channel for Hermes AI Topics hot-posts reports, using Cloudflare Email Service (REST API).
Slack cron (5e91a0b47c32)
└── generates Japanese hot-posts report → Slack channel
└── output saved to ~/.hermes/cron/output/5e91a0b47c32/
└── (15min offset) Email relay (new cron job)
└── no_agent script reads latest Slack output
└── sends HTML email via Cloudflare Email Service
Mirrors Discord relay pattern but uses Cloudflare Email API instead of Discord webhook.
Before the cron job can work, the user must:
report.kusari.cc (isolates reputation from main domain)Email Sending — Write~/.hermes/.env:
CF_ACCOUNT_ID=<your-cloudflare-account-id>
CF_EMAIL_API_TOKEN=<token-with-email_sending_write>
CF_EMAIL_FROM=Hermes Agent <hermes@report.kusari.cc>
CF_EMAIL_TO=<recipient-email>
CF_EMAIL_SUBJECT_PREFIX=[Hermes Report]
After user provides env vars:
Test with dry run:
python3 ~/ai-topics/scripts/cloudflare_email.py --subject "Test" --text "Hello from Hermes" --dry-run
Send test email:
python3 ~/ai-topics/scripts/cloudflare_email.py --subject "Hermes Test" --text "This is a test email from Hermes Agent via Cloudflare Email Service."
Test relay script:
python3 ~/.hermes/scripts/email_report_relay.py
Create cron job (see below)
cronjob(
action="create",
name="ai-topics-email-hot-posts",
schedule="45 0,4,8,12,16,20",
script="email_report_relay.py",
no_agent=True,
deliver="local", # or specific email/platform target
)
| File | Location | Purpose |
|---|---|---|
| Core module | ~/ai-topics/scripts/cloudflare_email.py | send_email_via_cloudflare() function + CLI |
| Core module (cron copy) | ~/.hermes/scripts/cloudflare_email.py | Copy for cron execution |
| Relay script | ~/.hermes/scripts/email_report_relay.py | Reads Slack output → emails via Cloudflare |
The relay generates a clean HTML email:
| Symptom | Likely Cause | Fix |
|---|---|---|
CF_ACCOUNT_ID not set | Env vars not loaded | Check ~/.hermes/.env has all 4 CF_EMAIL_* vars |
HTTP 403 | Token missing email_sending:write scope | Recreate token with correct permission |
HTTP 400 | Domain not onboarded | Onboard sender domain in Cloudflare Dashboard |
No Slack output files found | Slack job hasn't run yet | Run Slack job manually first: cronjob(action='run', job_id='5e91a0b47c32') |
Latest output is Xh old — skipping | Slack job failed earlier | Check Slack cron status, re-run if needed |
permanent_bounces for all recipients | Recipient email not valid / blocked | Check recipient address, check Cloudflare suppression list |
wiki-ingestion-pipelines — Hot-posts reporting pipeline (Slack + Discord sections)cron-job-management — Cron job lifecycle management