核心用法
Event Watcher 是一个面向 OpenClaw 的事件监听中间件,核心职责是按需唤醒 Agent——仅在特定事件到达时才触发会话,避免无意义的长轮询与 Token 消耗。
数据源支持:
- Redis Streams:支持消费者组(consumer group)与游标持久化,断点续传不丢事件。
- Webhook JSONL:通过
webhook_bridge.py接收 HTTP 推送,追加到本地 JSONL 文件后由 watcher 消费。
事件处理流程:
1. Normalize:统一事件格式(来源无关的标准结构)。
2. Filter:JSON 规则引擎支持 AND/OR 组合与正则匹配,精确筛选目标事件。
3. Deduplication:基于 TTL 的去重缓存,防止重复触发。
4. Delivery:通过 sessions_send 或 agent_gate 路由到指定会话;支持自动解析最新会话(不强制指定 session_key)。
5. Ack/Retry:结构化日志记录接收/匹配/投递/失败计数,失败自动重试。
显著优点:
- 成本可控:无事件时不唤醒 Agent,Token 消耗趋近于零。
- 架构轻量:纯 Python 脚本,无需 systemd/pm2,
nohup/tmux即可常驻。 - 路由灵活:支持 Slack 频道、用户 DM 自动会话解析,配置简洁。
- 可观测性:内置计数器与结构化日志,便于监控事件漏斗。
潜在局限:
- 运维责任:Redis 连接稳定性、游标持久化、JSONL 文件轮转需自行维护。
- 并发规模:单进程设计,高吞吐场景需水平扩展(多 consumer group 分片)。
- 无内置 UI:配置与状态查看依赖文件/YAML,无管理界面。
适合人群:
- 需要事件驱动自动化的 OpenClaw 用户,尤其是希望按需计费、避免常驻 Agent的场景。
- 已有 Redis 或 Webhook 基础设施,愿意承担轻量运维的技术团队。
常规风险:
- 配置漂移:
reply_to格式错误(如漏写channel:前缀)导致投递失败。 - 权限遗漏:Slack 频道未加入 OpenClaw allowlist,消息静默丢弃。
- TTL 设置不当:去重窗口过长可能漏掉合法重复事件,过短则可能导致重复触发。
- 重试风暴:下游 Agent 异常时若未设置退避策略,可能形成重试循环。