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 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 sources/active/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: 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: 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 sources/active/config_driven/configs/sourcename.yaml
# Update selectors or URLs
# Test
./capcat fetch sourcename --count 3
--count 3 for tests--dry-run first# Refresh registry
./capcat list sources
# Verify file exists
ls sources/active/config_driven/configs/sourcename.yaml
# Update config
vim 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