Skip to content

Boundary: Schedule plugins only emit candidate URLs. Ingest is Source plugins (pin via sourcePluginId or auto-match). Product guide: Schedules.

Schedule plugins

Shares plugin-kit (namespace=schedule).
Writing a plugin?Schedule plugin development

Goal

Pull “where candidates come from” out of the scheduler:

  • Core: cron + dedupe + create jobs
  • Plugins: RSS, charts, third-party APIs, custom sources

Architecture

text
apps/server/src/services/schedule/plugins/
  types.ts / registry.ts / loader.ts / host.ts / config/state

storage/plugins/schedule/<dir>/
  plugin.json
  index.js

Built-in plugins

idRoleDefault
schedule.rssRSS/Atomon
schedule.url-listFixed URL liston

(Also shipping built-ins such as GitHub Trending / Hacker News — see Settings and MCP list_schedule_plugins.)

Unified model (Settings → Schedules)

Each row is plugin + params + cadence — no special-case “is this a plugin?”.

Product guide: Schedules.

Install examples

bash
cp -R examples/schedule-plugin-github-trending \
  storage/plugins/schedule/github-trending