News
Bundled News module with tiled feed UI, RSS ingestion, Presseclipping metadata, module API writes, and news agent tools.
What it does
news is a bundled React module that collects curated or externally aggregated news items into one tiled feed. Items arrive by manual entry, automatic RSS ingestion, or programmatic writes from automations and agents. Each item can carry Presseclipping metadata (athlete/project/partner context, ranking, review status, reach), so the feed doubles as a media-monitoring review queue.
The module is also available as a native Apple screen in clients/apple/ClapilotApple (Sources/Clapilot/Views/NewsView.swift), with a compact list and a dedicated detail view for iPhone and macOS.
How to open it
- Web:
/modules/news(bundled module, slugnews). - Manifest:
bundled-modules/news/module.json; React renderer:src/components/modules/news-module.tsx. - Settings:
/settings/news(panel:src/components/news-settings-panel.tsx).
Key workflows
Read the feed
- Open
/modules/news. Items render as tiles of uniform size regardless of poster image dimensions. - Click a tile to open its detail dialog, where long summaries and full text remain readable.
- Follow the optional external source link on tiles that have one.
Ingest news via RSS
- Open
/settings/newsand add RSS source URLs; each source can be enabled or disabled individually. - Enable RSS auto-ingest and set the stale-sync interval (minutes) and the max imported entries per feed.
- Feeds sync on demand (
POST /rss-sync) and automatically when a module read finds the data stale.
Review Presseclippings
- Items store clipping metadata: athlete/project/partner context, a 1-3 ranking, review status (
pending,approved,rejected), relevance, source reach/type, and report preview or screenshot links. - Update review fields per item (UI or
PATCH /items/:id) to prepare clipping reports.
Write items programmatically
Automations, live tools, and native runtime tools can create or upsert items through POST /api/modules/news/api/items:
| Field | Notes |
|---|---|
title | required |
summary, content_text | optional body fields |
source_label, source_url, poster_image_url, published_at | optional presentation fields |
external_id | optional; enables idempotent upserts |
| clipping fields | top-level or under clipping: athlete_name, project_name, partner_name, rating (1-3), relevance, source_reach, article_type, review_status (pending/approved/rejected), report_preview_url, screenshot_url, import_source |
How the agent can drive it
The native runtime exposes first-class News tools (defined in services/clapilot-agent/src/tool-definitions.mjs, tool-catalog family "News"):
news_list_items— list entries with optionallimit(1-100),search,source_kind(manual/api/rss),athlete_name,review_status(pending/approved/rejected), andrefreshto trigger an RSS sync before reading.news_create_item— create or upsert one entry; acceptstitle(required) plus the same summary/source/poster/external_idand clipping fields as the module API write payload above.
For flows the tools do not cover (settings, RSS source management, item updates), agents and automations use the module API directly.
Module API reference
Base: /api/modules/news/api
| Route | Purpose |
|---|---|
GET /health | health check |
GET /items | list items; supports limit, search, source_kind, athlete_name, review_status, and optional refresh=true |
POST /items | create or upsert one news item |
PATCH /items/:id | update an item and its Presseclipping metadata for manual review/report preparation |
GET /settings, POST /settings | read/write module settings |
GET /rss-sources, POST /rss-sources | list/create RSS sources |
PUT /rss-sources/:id, DELETE /rss-sources/:id | update/remove an RSS source |
POST /rss-sync | trigger an RSS sync run |
Configuration & limits
Settings persisted via /settings/news:
- whether RSS auto-ingest is enabled
- stale-sync interval in minutes
- max imported entries per feed
- list of RSS source URLs with per-source enabled/disabled state
Data model (migrations db/migrations/074_news_module.sql and bundled-modules/news/migrations/001_create_news_schema.sql):
news_module_settingsnews_rss_sourcesnews_items
Troubleshooting
- Feed looks stale: trigger
POST /api/modules/news/api/rss-syncor callGET /items?refresh=true; check that the RSS source is enabled in/settings/news. - Duplicate items from automations: pass a stable
external_idonPOST /itemsso writes upsert instead of inserting.
