app
RSS to Google Chat
Public Made by Adomby adom
Post new RSS feed items straight into your Google Chat spaces. A small always-on poller with a pinnable web editor: click the link in your space, add or edit feeds, Save — live within one poll cycle. Per-feed dedup handles both news feeds (post once) and status pages (re-post on updates).
← Commit history
Publish 1.0.0
7 files changed
+144
SKILL.mdadded+89@@ -0,0 +1,89 @@+---+name: adom-rss-gchat+description: Set up and manage RSS-to-Google-Chat feed posting. Use when the user wants new RSS/Atom feed items (news, blogs, release notes, status pages) posted automatically into a Google Chat space, wants to add/remove/edit which feeds post, or asks about adom-rss-gchat. Trigger words - rss to chat, feed to google chat, post articles to chat, watch a feed, status page in chat, rss notifications, feed bot, adom-rss-gchat.+---++# adom-rss-gchat++A small always-on service that polls RSS feeds and posts each new item into a+Google Chat space via webhook. Feeds are managed from a token-gated web editor+the user pins to their Chat space. Runs on the user's own small Adom container;+no central service, no shared credentials.++## Architecture (what runs where)++- **Service container** (default-light, user-owned): runs the `adom-rss-gchat`+ binary (poll loop, default every 30 min) plus a tiny Python feed editor on+ port 8842, both supervised by a 2-minute cron watchdog.+- **Data** lives in `~/rss-gchat/` on that container: `feeds.json` (live feed+ list, hot-reloaded each cycle), `state.json` (per-feed seen-item sets — never+ posts a duplicate), `editor.token` (capability token), `env` (config).+- **Feed edits** go through the editor URL; a save is live within one poll+ cycle. New feeds seed silently — only items published after adding are posted.++## First-time setup (walk the user through this)++1. **Create a dedicated service container** (from the user's dev container):++ ```bash+ IMAGE_ID=$(adom-cli carbon containers images | jq -r '.[] | select(.name=="default-light") | .id')+ # Container must be attached to a repo at creation. Use (or create) one:+ adom-cli carbon user repo-create rss-gchat --private --description "RSS to Google Chat service"+ REPO_ID=$(adom-cli carbon user repos | jq -r '.[] | select(.name=="rss-gchat") | .id')+ adom-cli carbon containers create --image-id "$IMAGE_ID" --class small --repo-id "$REPO_ID"+ ```++ Note the `slug` and `ssh_credentials.username` from the response. Wait+ ~20s for SSH to come up.++2. **Install on the service container** (one-liner, no Rust/git needed):++ ```bash+ ssh -o StrictHostKeyChecking=accept-new <ssh-username>@adom.cloud \+ 'curl -fsSL https://wiki.adom.inc/download/adom/adom-rss-gchat/1.0.0/install.sh | bash'+ ```++ The installer prints the editor token and the exact next steps.++3. **Expose the editor** (back on the dev container):++ ```bash+ adom-cli carbon containers port-add <slug> --port 8842 --prefix rss-editor+ ```++ Editor URL = `https://<returned-hostname>/?token=<token-from-step-2>`.++4. **Hand the user the editor URL.** Its on-page setup guide covers the+ Google Chat side: open the space, space name menu, Apps & integrations,+ Webhooks, Add webhook, copy the URL, paste it into the feed row. Tell the+ user to **pin the editor URL to the space** afterward.++## Managing feeds++Prefer sending the user to their editor URL (it validates, backs up, and+hot-reloads). For direct automation, edit `~/rss-gchat/feeds.json` on the+service container over SSH — same format:++```json+{ "feeds": [ { "url": "https://example.com/feed.xml", "label": "Example",+ "dedup": "guid", "webhook": "https://chat.googleapis.com/..." } ] }+```++- `dedup: "guid"` — post once per item (news, blogs).+- `dedup: "guid+date"` — re-post when an item's pubDate changes (status pages:+ Investigating, Monitoring, Resolved each post).+- `webhook` — per-feed Chat webhook. Feeds route independently, so one service+ instance can post different feeds to different spaces.+- Saving an empty list pauses all posting (nothing is forgotten; state stays).++## Operations++- Logs: `~/rss-gchat/bridge.log`, `~/rss-gchat/editor.log` on the container.+- Upgrade: re-run the install one-liner (data/feeds/token all preserved).+- Rotate a leaked editor URL: `rm ~/rss-gchat/editor.token`, re-run installer,+ re-pin the new URL.+- Cold-boot caveat: if the whole container restarts, start cron once:+ `ssh <user>@adom.cloud 'sudo service cron start'` — the watchdog then+ revives everything within 2 minutes.+- Never `pkill -f` the binary path over SSH (self-matches the SSH wrapper+ shell); use `pidof adom-rss-gchat`.
docs/editor-feeds.pngadded⋯ 1 unchanged line ⋯
docs/editor-setup.pngadded⋯ 1 unchanged line ⋯
docs/hero.pngadded⋯ 1 unchanged line ⋯
install.shadded+8@@ -0,0 +1,8 @@+#!/bin/sh+# Dev-container install for adom-rss-gchat: the runtime lives on a dedicated+# service container, so there is nothing to install here beyond the skill+# (which the registry places automatically). Point the user at the setup flow.+set -e+echo "adom-rss-gchat: skill installed."+echo "The service itself runs on a dedicated container. Ask your agent to"+echo "'set up adom-rss-gchat' or follow: https://wiki.adom.inc/adom/adom-rss-gchat"
package.jsonadded+42@@ -0,0 +1,42 @@+{+ "slug": "adom-rss-gchat",+ "title": "RSS to Google Chat",+ "type": "app",+ "version": "1.0.0",+ "description": "Post new RSS feed items straight into your Google Chat spaces. A small always-on poller with a pinnable web editor: click the link in your space, add or edit feeds, Save \u2014 live within one poll cycle. Per-feed dedup handles both news feeds (post once) and status pages (re-post on updates).",+ "tags": [+ "rss",+ "google-chat",+ "notifications",+ "service"+ ],+ "dependencies": {},+ "discovery_triggers": [+ "post an rss feed to google chat",+ "rss to chat",+ "feed notifications in a chat space",+ "watch a blog and post new articles to chat",+ "status page updates in google chat",+ "set up adom-rss-gchat"+ ],+ "discovery_pitch": "When a user wants new RSS/Atom feed items (news, blogs, status pages) posted automatically into a Google Chat space, with a web editor to manage the feed list.",+ "sample_prompts": [+ {+ "label": "Vendor news into Chat",+ "prompt": "Post new articles from our vendor's news RSS feed into our team's Google Chat space"+ },+ {+ "label": "Status page alerts",+ "prompt": "I want incident updates from a status page's RSS feed to show up in Google Chat"+ }+ ],+ "scripts": {+ "install": "./install.sh",+ "uninstall": "./uninstall.sh"+ },+ "hero": {+ "headline": "RSS to Google Chat",+ "subhead": "New feed items, posted to your space. Edit feeds from a link pinned right next to them.",+ "screenshot": "docs/hero.png"+ }+}
uninstall.shadded+5@@ -0,0 +1,5 @@+#!/bin/sh+# Removes the dev-container skill only. The service container (if any) is+# user-owned and untouched — delete it via adom-cli if no longer wanted.+set -e+echo "adom-rss-gchat: skill removed. Any service container you created is untouched."