nexo-poller
Generic polling runtime for Nexo — cron-style schedules, durable cursors, retry/DLQ semantics, single-instance leases. Powers gmail / rss / webhook / google-calendar / agent_turn built-ins plus extension-loaded pollers.
This crate is part of Nexo — a multi-agent Rust framework with a NATS event bus, pluggable LLM providers (MiniMax, Anthropic, OpenAI-compat, Gemini, DeepSeek), per-agent credentials, MCP support, and channel plugins for WhatsApp, Telegram, Email, and Browser (CDP).
- Main repo: https://github.com/lordmacu/nexo-rs
- Runtime engine:
nexo-core - Public docs: https://lordmacu.github.io/nexo-rs/
What this crate does
- Cron-style scheduler — each job has a cron expression + jitter; the runtime ticks every minute and dispatches due jobs to their declared poller.
- Durable cursors — every successful tick persists a per- job cursor (timestamp, history-id, message-id, etc.) so a restart resumes from where it left off.
- Single-instance lease — cross-process SQLite lease prevents two daemons from double-ticking the same job.
- Retry / DLQ classification — poller responses with
error_kind: "transient"retry with exponential backoff;permanentgo to a per-job DLQ;skippedcount as successful no-ops. - Built-in pollers:
gmail— Gmail history sync via Google APIrss— Atom + RSS feed polling with feed-aware cachingwebhook_poll— GET-and-classify against a webhookgoogle_calendar— calendar event watchingagent_turn(Phase 20) — synthetic LLM turn delivered to a channel on cron schedule
- Extension hook —
nexo-poller-extlets third-party extensions register their own poller kinds via thecapabilities.pollersmanifest field. PollContext.llm_*— every poller has access to the agent's LLM client + tool registry so it can compose agent-driven reactions (e.g. agent_turn).
Public API
Configuration
# config/pollers.yaml
pollers:
jobs:
- id: kate-rss-news
kind: rss
cron: "*/15 * * * *"
enabled: true
args:
urls:
delivery:
agent: kate
channel: whatsapp
instance: primary
Install
[]
= "0.1"
Documentation for this crate
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.