Add, remove, test, and organize news sources in Capcat.
See what's available:
capcat list sources
Output organized by category:
TECH:
- hn Hacker News
- lb Lobsters
- iq InfoQ
NEWS:
- bbc BBC News
- guardian The Guardian
SCIENCE:
- nature Nature News
Total: 15 sources
Add an RSS source in one command:
capcat add-source --url https://techcrunch.com/feed/
Interactive prompts:
[OK] Feed 'TechCrunch' found.
Source ID: techcrunch
Category: tech
Add to bundle? Yes
Bundle: tech
Test fetch? Yes
[OK] Source added successfully!
Use the visual menu:
capcat catch
# Select: Manage Sources
# Select: Add New Source from RSS Feed
# Paste URL
For complex sources:
capcat generate-config
Interactive wizard for:
Remove sources interactively:
capcat remove-source
Process:
Select sources to remove:
[ ] hn Hacker News
[x] oldsite Old Site
[x] discontinued Discontinued
Confirm removal? Yes
[OK] Backup created: .capcat-backups/backup_20251126_100000/
[OK] 2 sources removed
See what would be removed:
capcat remove-source --dry-run
Shows:
Restore last removed sources:
capcat remove-source --undo
Or restore specific backup:
capcat remove-source --undo backup_20251126_100000
Verify a source works:
capcat fetch sourcename --count 3
Success indicators:
capcat catch
# Select: Manage Sources
# Select: Test a Source
# Choose source
# View results
If a source fails:
--count 1Common fixes:
# RSS feed might have changed
# Edit config
vim Config/sources/active/config_driven/configs/sourcename.yaml
# Update feed_url if RSS moved
# Save and test again
capcat fetch sourcename --count 3
Sources auto-group by category field in config.
View by category:
capcat list sources
Include source in bundle:
vim Config/sources/active/bundles/bundles.yml
Add to existing bundle:
tech:
sources:
- hn
- lb
- newsource # Add here
Or let bundle auto-discover by matching category:
When adding source, assign meaningful category:
Try these URL patterns:
https://example.com/feed
https://example.com/rss
https://example.com/feed.xml
https://example.com/rss.xml
https://example.com/feed/
Test in browser first:
https://techcrunch.com/feed/
Should show XML with articles.
Location: Config/sources/active/config_driven/configs/
Simple YAML:
display_name: "Example News"
base_url: "https://example.com/"
category: "tech"
timeout: 10.0
rate_limit: 1.0
article_selectors:
- ".headline a"
content_selectors:
- ".article-content"
Location: Config/sources/active/custom/sourcename/
Contains:
source.py - Python implementationconfig.yaml - ConfigurationUse for complex sources with:
Test all sources:
# List sources
capcat list sources
# Test each that matters to you
capcat fetch hn --count 3
capcat fetch bbc --count 3
capcat fetch nature --count 3
Remove sources you don't use:
capcat remove-source
# Select unused sources
# Confirm removal
If source changes their website:
# Edit config
vim Config/sources/active/config_driven/configs/sourcename.yaml
# Update selectors or URLs
# Test
capcat fetch sourcename --count 3
Capcat ships with built-in source configurations for all predefined sources (HN, BBC, Guardian, etc.). When a new version of Capcat is released with updated source configs, you are notified the next time you run a fetch.
If the upstream source config has changed but your local copy is unmodified, Capcat silently applies the update and continues the fetch. No action required.
If you have edited a source config file and an upstream update is also available for that file, Capcat prompts you with an interactive selection:
WARNING: source updates available for modified files: bbc.yaml
Run capcat fetch interactively to review.
Running interactively presents a choice per modified file:
bbc.yaml — local copy differs from upstream update
Keep my version
Apply upstream update (replaces your edits)
Skip for now
Use arrow keys to select and press Enter. Your choice is applied before the fetch proceeds.
Each source config has an ownership field in the vault manifest:
ownership: app — Capcat manages this file; updates apply silently.ownership: user — You have edited this file; updates prompt for review.Ownership flips to user automatically the first time you edit a source config. You do not manage this manually.
--count 3 for tests--dry-run first# Refresh registry
capcat list sources
# Verify file exists
ls Config/sources/active/config_driven/configs/sourcename.yaml
# Update config
vim Config/sources/active/config_driven/configs/sourcename.yaml
# Change rss_url
# Test
capcat fetch sourcename --count 3
# Add source
capcat add-source --url RSS_URL
# Remove source
capcat remove-source
# Test source
capcat fetch SOURCE --count 3
# List sources
capcat list sources
# Generate config
capcat generate-config
# Undo removal
capcat remove-source --undo