rss-feeds
Access and configure the RSS 2.0 feed generated by changelog-site.
Best use case
rss-feeds is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Access and configure the RSS 2.0 feed generated by changelog-site.
Teams using rss-feeds should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/rss-feeds/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How rss-feeds Compares
| Feature / Agent | rss-feeds | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Access and configure the RSS 2.0 feed generated by changelog-site.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# RSS Feeds Skill
## When to use
Use this skill to:
- Fetch the raw RSS 2.0 feed XML
- Verify feed structure and entry content
- Enable or disable the feed via settings
- Understand the feed format for feed reader integration
## Feed URL
```
GET /rss.xml
```
The feed is publicly accessible at `/rss.xml`. No authentication required.
```bash
curl http://localhost:3000/rss.xml
```
The response is `Content-Type: application/rss+xml; charset=utf-8`.
## Feed format
The feed follows RSS 2.0. Entry bodies use CDATA to wrap HTML safely.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Acme App Changelog</title>
<link>https://changelog.acmeapp.com</link>
<description>Product updates, bug fixes, and new features.</description>
<language>en</language>
<lastBuildDate>Thu, 20 Mar 2026 10:00:00 +0000</lastBuildDate>
<atom:link href="https://changelog.acmeapp.com/rss.xml"
rel="self" type="application/rss+xml"/>
<item>
<title>Dark mode support across all pages</title>
<link>https://changelog.acmeapp.com/dark-mode-support</link>
<guid isPermaLink="true">https://changelog.acmeapp.com/dark-mode-support</guid>
<pubDate>Thu, 20 Mar 2026 00:00:00 +0000</pubDate>
<category>Added</category>
<description><![CDATA[<p>We've added a full dark mode...</p>]]></description>
</item>
</channel>
</rss>
```
## Feed fields
| RSS field | Source |
|---|---|
| `<title>` (channel) | `settings.product_name + " Changelog"` |
| `<link>` (channel) | `settings.public_url` |
| `<description>` (channel) | `settings.description` |
| `<lastBuildDate>` | Published date of the most recent entry |
| `<title>` (item) | `entry.title` |
| `<link>` (item) | `settings.public_url + "/" + entry.slug` |
| `<guid>` | Same as item `<link>` |
| `<pubDate>` | `entry.published_at` in RFC 822 format |
| `<category>` | `entry.category` (title-cased) |
| `<description>` | `entry.body_html` wrapped in CDATA |
## Feed behavior
- The feed includes only published entries (`is_draft = false`).
- Entries are ordered by `published_at` descending (newest first).
- The feed contains up to 50 entries. Older entries are not paginated.
- Draft entries never appear in the feed even if a direct URL is guessed.
- The feed regenerates on each request from the database. No static file caching.
## Enable or disable the feed
The feed is enabled by default. To disable it:
```bash
curl -X PUT http://localhost:3000/api/settings \
-H "Content-Type: application/json" \
-d '{"rss_enabled": false}'
```
When disabled, `GET /rss.xml` returns `404`.
To re-enable:
```bash
curl -X PUT http://localhost:3000/api/settings \
-H "Content-Type: application/json" \
-d '{"rss_enabled": true}'
```
## Verify feed is valid
Use the `curl` response headers to confirm the correct content type:
```bash
curl -I http://localhost:3000/rss.xml
```
Expected:
```
HTTP/1.1 200 OK
Content-Type: application/rss+xml; charset=utf-8
```
## Autodiscovery
The public changelog page includes an autodiscovery `<link>` tag in `<head>` so feed readers can find the feed automatically:
```html
<link rel="alternate" type="application/rss+xml"
title="Acme App Changelog"
href="https://changelog.acmeapp.com/rss.xml">
```
## Feed reader subscription URLs
Common feed readers accept the raw feed URL directly. For direct subscription links:
| Reader | URL pattern |
|---|---|
| Feedly | `https://feedly.com/i/subscription/feed/{encoded_feed_url}` |
| Inoreader | `https://www.inoreader.com/feed/{encoded_feed_url}` |
| Generic | Paste the feed URL directly into any RSS reader |
Replace `{encoded_feed_url}` with the URL-encoded value of `https://changelog.acmeapp.com/rss.xml`.
## Troubleshooting
**Feed returns 404**
Check that `rss_enabled` is `true` in settings:
```bash
curl http://localhost:3000/api/settings | jq .rss_enabled
```
**Feed shows no items**
Verify that at least one entry is published (not draft):
```bash
curl "http://localhost:3000/api/entries?status=published&limit=1"
```
**Feed content is stale**
The feed is generated dynamically on each request. There is no cache to clear. If entries appear in the API but not the feed, check that `published_at` is set (not null) on those entries.
**Invalid XML in feed**
Entry body HTML is sanitized with DOMPurify before storage. If a feed validator reports malformed XML, the likely cause is unescaped characters in the `product_name` or `description` setting. Update those fields to remove `<`, `>`, or `&` characters.Related Skills
Skill: Uptime Monitoring
## Overview
Skill: Status Page
## Overview
Skill: unit-conversion
## Overview
Skill: recipe-scaler
## Overview
reading-list
Operate the reading-list API to save, manage, tag, search, and export articles.
email-digest
Configure, test, and troubleshoot the reading-list daily email digest delivered via nodemailer.
websocket-realtime
Use the WebSocket connection in poll-builder to receive live vote updates. Use when you need to stream real-time poll results, monitor a poll for new votes, or build a live dashboard. Triggers include "live results", "real-time updates", "stream votes", "watch poll", or "WebSocket".
poll-builder
Self-hosted poll creation tool with real-time results. Use when you need to create a poll, check vote counts, close a poll, export results, or get the shareable link for a poll. Triggers include "create poll", "vote", "poll results", "survey", "collect votes", "share poll", or any task involving polling or voting.
Skill: personal-finance
## Overview
Skill: csv-import
## Overview
Skill: Syntax Highlighting
## Purpose
Skill: Pastebin Core
## Purpose