Autonomous Messaging

PocketPaw can send messages proactively — without waiting for user input. This is powered by three components: the Proactive Daemon (orchestrator), Intentions (scheduled behaviors), and the Channel Notifier (delivery).

How It Works

┌─────────────────────────────────┐
│ Proactive Daemon │
│ (orchestrates intentions) │
├──────────┬──────────────────────┤
│ Trigger │ Intention │
│ Engine │ Executor │
│ (cron) │ (runs agent) │
└────┬─────┴──────────┬───────────┘
│ │
▼ ▼
APScheduler Channel Notifier
fires trigger → delivers to channels

Intentions

An intention is a scheduled agent behavior — a prompt that runs on a trigger.

Intention Schema

FieldTypeDescription
namestringHuman-readable name (e.g., “Morning Standup”)
promptstringThe prompt to send to the agent
triggerobjectWhen to fire (cron schedule)
context_sourcesarrayAdditional context to inject (e.g., system_status)
enabledbooleanWhether the intention is active

Creating Intentions

User: Every weekday at 8 AM, check my calendar and summarize today's meetings
Agent: Created intention "Daily Calendar Brief" — triggers Mon-Fri at 8:00 AM

Trigger Types

Currently supports cron triggers with standard 5-field expressions:

minute hour day month day_of_week
0 8 * * 1-5 (weekdays at 8 AM)

Common presets are available:

PresetSchedule
every_minute* * * * *
every_5_minutes*/5 * * * *
every_hour0 * * * *
every_morning_8am0 8 * * *
weekday_morning_8am0 8 * * 1-5
daily_noon0 12 * * *
weekly_monday_9am0 9 * * 1
monthly_first_9am0 9 1 * *

Intention Lifecycle

  1. Create — Define name, prompt, trigger, and context sources
  2. Schedule — Trigger engine registers the cron job
  3. Fire — When the trigger fires, the executor runs the agent with the prompt
  4. Deliver — Results are streamed to the dashboard and optionally pushed to channels
  5. Repeat — The trigger re-schedules for the next occurrence

Channel Notifier

The notifier delivers messages to any configured channel without user interaction.

Configuration

Set notification targets in settings as "channel:chat_id" strings:

Terminal window
export POCKETCLAW_NOTIFICATION_CHANNELS='["telegram:123456789","discord:987654321","slack:C0A1B2C3D"]'

Supported channel formats:

FormatExample
telegram:{chat_id}telegram:123456789
discord:{channel_id}discord:987654321
slack:{channel_id}slack:C0A1B2C3D
whatsapp:{phone}whatsapp:+1234567890
signal:{phone}signal:+1234567890
matrix:{room_id}matrix:!abc:matrix.org
teams:{conversation_id}teams:19:abc@thread.v2
gchat:{space}gchat:spaces/abc123

Usage Points

The notifier is called by:

  • Scheduler — When reminders trigger
  • Proactive Daemon — When intentions execute
  • Deep Work — Human task notifications and project completion alerts
  • Dashboard — Broadcast messages

Owner ID

Set the owner_id to identify yourself. This enables the memory system to distinguish between your messages and those from other users on shared channels.

Terminal window
export POCKETCLAW_OWNER_ID="your_telegram_user_id"

Persistence

  • Intentions are stored in ~/.pocketclaw/intentions.json
  • Notification channel targets are stored in config
  • The daemon reloads all intentions on startup and re-schedules triggers

Dashboard Integration

The web dashboard provides:

  • View and manage all intentions
  • Toggle intentions on/off
  • Trigger an intention manually
  • See next scheduled run time
  • Stream execution results in real time
Tip

Combine autonomous messaging with Gmail and Calendar tools for powerful automated workflows. For example: “Every morning at 8 AM, check my calendar and email, then send a Telegram summary.”