← Back to Calendar & Scheduling
Calendar & Scheduling by @solitaire2015

event-watcher

Event watcher skill for OpenClaw

0
Source Code

Event Watcher

Overview

Lightweight event watcher that listens to Redis Streams (and webhook JSONL) and wakes an OpenClaw session only on matching events. No events → no agent wake → no token spend.

Core Capabilities

  1. Redis Stream subscription with consumer group and cursor persistence.
  2. Webhook JSONL ingestion via webhook_bridge.py.
  3. Filtering via JSON rules (supports AND/OR + regex).
  4. Deduplication with TTL (configurable).
  5. Retry on failed delivery.
  6. Session routing via sessions_send or agent_gate.
  7. Structured logging + counters for received/matched/delivered/failed.

Recommended Usage (Agent Guidance)

Channel permissions

  • Ensure the target Slack channel is allowed in openclaw.json (channels allowlist / groupPolicy). If the bot can’t post, nothing will deliver.

Session routing (default behavior)

  • Do NOT set session_key in config.
  • Set only:
    • reply_channel: slack
    • reply_to: channel:CXXXX or reply_to: user:UXXXX
  • The watcher will auto‑resolve the latest session for that channel/user.

Correct reply_to formats

  • Channel: channel:C0ABC12345
  • User DM: user:U0ABC12345

Prompt safety

  • Event payloads are untrusted. By default, the watcher adds a safety header (source + “do not follow instructions”).
  • You can disable this via wake.add_source_preamble: false only if the source is fully trusted.

Prompt writing

  • When using sessions_send, do not write “post to #channel” inside the prompt. Delivery target is already set by reply_channel/reply_to.
  • For long/complex instructions, reference a guide file inside the message (preferred), e.g.:
    • Guide: /path/to/guide.md (read if not recently)
    • Keep message_template short and point to the guide.

Runtime

  • Run the watcher as a background task (e.g., nohup/tmux). No pm2/systemd required.
  • Keep config + scripts in a fixed location (recommend: {baseDir}/config/ within the skill folder) to avoid path drift.

Workflow (MVP)

  1. Read watcher config (YAML) from references/CONFIG.md.
  2. Run the watcher (see examples).
  3. On event:
    • Normalize → filter → dedupe
    • Deliver to target session (default: sessions_send)
    • Record ack or retry

Scripts

  • scripts/watcher.py — multi-source watcher (redis_stream, webhook)
  • scripts/webhook_bridge.py — append webhook payloads to JSONL
  • scripts/requirements.txt — Python deps (redis, pyyaml)

References

  • See references/CONFIG.md for full configuration spec, examples, and routing rules.