Configuration Guide
Horizon is configured through two files: a .env file for API keys and a data/config.json file for sources, AI provider, and filtering options.
AI Providers
Configure which AI model scores and summarizes your content.
Anthropic Claude:
{
"ai": {
"provider": "anthropic",
"model": "claude-sonnet-4.5-20250929",
"api_key_env": "ANTHROPIC_API_KEY"
}
}
OpenAI:
{
"ai": {
"provider": "openai",
"model": "gpt-4",
"api_key_env": "OPENAI_API_KEY"
}
}
Custom Base URL (for proxies):
{
"ai": {
"provider": "anthropic",
"base_url": "https://your-proxy.com/v1",
...
}
}
Information Sources
All sources are configured under the top-level sources key in config.json.
GitHub
{
"sources": {
"github": [
{
"type": "user_events",
"username": "gvanrossum",
"enabled": true
},
{
"type": "repo_releases",
"owner": "python",
"repo": "cpython",
"enabled": true
}
]
}
}
Hacker News
{
"sources": {
"hackernews": {
"enabled": true,
"fetch_top_stories": 30,
"min_score": 100
}
}
}
RSS Feeds
{
"sources": {
"rss": [
{
"name": "Blog Name",
"url": "https://example.com/feed.xml",
"enabled": true,
"category": "ai-ml"
}
]
}
}
{
"sources": {
"reddit": {
"enabled": true,
"fetch_comments": 5,
"subreddits": [
{
"subreddit": "MachineLearning",
"sort": "hot",
"fetch_limit": 25,
"min_score": 10
}
],
"users": [
{
"username": "spez",
"sort": "new",
"fetch_limit": 10
}
]
}
}
}
Filtering
Content is scored 0-10:
- 9-10: Groundbreaking - Major breakthroughs, paradigm shifts
- 7-8: High Value - Important developments, deep technical content
- 5-6: Interesting - Worth knowing but not urgent
- 3-4: Low Priority - Generic or routine content
- 0-2: Noise - Spam, off-topic, or trivial
{
"filtering": {
"ai_score_threshold": 7.0,
"time_window_hours": 24
}
}
ai_score_threshold: Only include content scoring >= this valuetime_window_hours: Fetch content from last N hours
Environment Variable Substitution
RSS feed URLs support ${VAR_NAME} syntax for secrets. The variable is expanded at runtime from environment variables (or .env file):
{
"name": "LWN.net",
"url": "https://lwn.net/headlines/full_text?key=${LWN_KEY}",
"enabled": true
}
This way config.json can be committed to a public repo without leaking tokens.