# Cron Delivery Channels — What Works

## Primary channel (always available)

**`HERMES_CRON_AUTO_DELIVER_PLATFORM=telegram`** — The cron system automatically delivers the agent's final response to the configured Telegram chat. No API calls needed. Just output your report as the final message.

**Rule:** Do NOT call any explicit Telegram API (Composio, `hermes send`, etc.) during cron execution. The auto-delivery handles it. Double-sending wastes resources and may confuse the recipient.

## Channels NOT available in cron mode

| Channel | Why it fails | When it works |
|---------|-------------|---------------|
| **Composio Telegram** | Requires user to complete OAuth in browser — no user present in cron | Interactive sessions only |
| **Composio Gmail/Google** | Similarly requires OAuth unless already connected | Interactive only |
| **`hermes send`** | Works only if `HERMES_CRON_AUTO_DELIVER_PLATFORM` is unset; otherwise causes duplicate delivery | When no auto-delivery is configured |

## Detection at startup

At the top of a cron execution, detect delivery mode:

```bash
echo "${HERMES_CRON_AUTO_DELIVER_PLATFORM:-none}"
```

If this outputs `telegram` (or messagem, discord, etc.), use it. The auto-delivery is reliable — no verification needed.

## What this means for the pipeline

- **Phase 1-3** (collect, generate, server) proceed identically
- **Phase 4** (deliver): in cron mode, skip all Composio/transport setup. Just produce the final report text. The system handles delivery.
- **Interactive mode:** the user is present and can complete OAuth if needed. Composio Telegram is viable there.
