
News
- 18 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
news is a Claude Code skill that monitors X and RSS news sources and correlates breaking stories with prediction-market price movements.
About
This skill monitors news and correlates it with prediction-market movements in the clodds bot. A developer uses it to pull recent news from X accounts and RSS feeds, auto-match breaking stories to affected markets, and track how news moves prices and volume. It supports topic news alerts and market-specific queries.
- Monitor news from X accounts and RSS feeds
- Auto-match breaking news to affected prediction markets
- Track price impact and volume spikes after news
News by the numbers
- 18 all-time installs (skills.sh)
- Ranked #725 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
news capabilities & compatibility
- Capabilities
- news monitoring · market correlation · alerts
- Use cases
- research
- Runs
- Runs locally
- Pricing
- Free
What news says it does
Track news that affects prediction markets and correlate with price movements.
When news breaks, automatically identify affected markets:
npx skills add https://github.com/alsk1992/cloddsbot --skill newsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 18 |
|---|---|
| repo stars | ★ 610 |
| Last updated | June 26, 2026 |
| Repository | alsk1992/cloddsbot ↗ |
What it does
Monitor news feeds and correlate breaking stories with prediction-market price and volume moves.
Who is it for?
Spotting news that moves prediction markets and correlating it with price action
When should I use this skill?
You want recent market-moving news or a news alert on a topic
By the numbers
- 5 X/Twitter source accounts listed
- 4 RSS feeds listed
Files
News Skill
Track news that affects prediction markets and correlate with price movements.
Commands
Recent News
/news
/news trump
/news fedMarket-Specific News
/news for "Trump 2028"News Alerts
/news alert trump
/news alert "fed rate"News Sources
Twitter/X Accounts
- @polyaborama - Polymarket updates
- @Kalshi - Kalshi official
- @MetaculusHQ - Metaculus updates
- @NateSilver538 - Political analysis
- @business - Bloomberg breaking
RSS Feeds
- Reuters Politics
- AP News
- Federal Reserve Press
- POLITICO
Correlation Features
Auto-Matching
When news breaks, automatically identify affected markets:
- "Trump indicted" → Trump election markets
- "Fed signals pause" → Rate cut markets
- "Player injured" → Sports markets
Price Impact
Track how news affects market prices:
- News timestamp vs price movement
- Volume spike detection
- Sentiment analysis
Examples
User: "What's moving markets right now?" → Show recent news with correlated market moves
User: "Why did Trump drop 5%?" → Find news from past hour matching "Trump" → Correlate with price action
User: "Alert me to any Fed news" → Create news alert for "fed" OR "fomc" OR "powell"
Output Format
📰 MARKET-MOVING NEWS
🔴 HIGH IMPACT (5 min ago)
Reuters: "Trump hints at not running in 2028"
Affected Markets:
• Trump 2028 (Poly): 47¢ → 42¢ (-10.6%)
• Trump 2024 (Kalshi): 52¢ → 54¢ (+3.8%)
• DeSantis 2028 (Poly): 12¢ → 18¢ (+50%)
Volume Spike: 3.2x normal
──────────────────────────
🟡 MEDIUM IMPACT (23 min ago)
Bloomberg: "Fed officials signal data-dependent approach"
Affected Markets:
• Fed March Cut (Poly): 23¢ → 25¢ (+8.7%)
• Fed May Cut (Kalshi): 45¢ → 47¢ (+4.4%)/**
* News CLI Skill
*
* Commands:
* /news - Show recent market-moving news
* /news <query> - Search news by keyword
* /news for <market> - Find news relevant to a market
* /news alert <keyword> - Set up a news alert (informational)
*/
import { createNewsFeed, NewsFeed } from '../../../feeds/news/index';
import { logger } from '../../../utils/logger';
let feed: NewsFeed | null = null;
async function getFeed(): Promise<NewsFeed> {
if (feed) return feed;
try {
feed = await createNewsFeed({
twitter: {
accounts: ['polyaborama', 'Kalshi', 'MetaculusHQ', 'NateSilver538', 'business'],
bearerToken: process.env.X_BEARER_TOKEN || process.env.TWITTER_BEARER_TOKEN,
},
});
await feed.start();
return feed;
} catch (error) {
logger.error({ error }, 'Failed to initialize news feed');
throw error;
}
}
async function handleRecentNews(query?: string): Promise<string> {
try {
const f = await getFeed();
if (query) {
const items = f.searchNews(query);
if (items.length === 0) {
return `No news found matching "${query}".`;
}
let output = `**News: "${query}"** (${items.length} results)\n\n`;
for (const item of items.slice(0, 15)) {
const ago = getTimeAgo(item.publishedAt);
output += `**${item.title}**\n`;
output += ` Source: ${item.source} | ${ago}\n`;
if (item.url) {
output += ` ${item.url}\n`;
}
if (item.relevantMarkets && item.relevantMarkets.length > 0) {
output += ` Keywords: ${item.relevantMarkets.join(', ')}\n`;
}
output += '\n';
}
return output;
}
const items = f.getRecentNews(15);
if (items.length === 0) {
return 'No recent news available. Feed may still be loading.';
}
let output = `**Recent Market-Moving News** (${items.length} items)\n\n`;
for (const item of items) {
const ago = getTimeAgo(item.publishedAt);
output += `**${item.title}**\n`;
output += ` Source: ${item.source} | ${ago}\n`;
if (item.url) {
output += ` ${item.url}\n`;
}
if (item.relevantMarkets && item.relevantMarkets.length > 0) {
output += ` Keywords: ${item.relevantMarkets.join(', ')}\n`;
}
output += '\n';
}
return output;
} catch (error) {
return `Error fetching news: ${error instanceof Error ? error.message : String(error)}`;
}
}
async function handleNewsForMarket(marketQuestion: string): Promise<string> {
try {
const f = await getFeed();
const items = f.getNewsForMarket(marketQuestion);
if (items.length === 0) {
return `No news found related to "${marketQuestion}".`;
}
let output = `**News for "${marketQuestion}"** (${items.length} results)\n\n`;
for (const item of items) {
const ago = getTimeAgo(item.publishedAt);
output += `**${item.title}**\n`;
output += ` Source: ${item.source} | ${ago}\n`;
if (item.url) {
output += ` ${item.url}\n`;
}
output += '\n';
}
return output;
} catch (error) {
return `Error fetching news: ${error instanceof Error ? error.message : String(error)}`;
}
}
function handleAlert(keyword: string): string {
if (!keyword) {
return 'Usage: /news alert <keyword>';
}
return `News alerts are not yet implemented. Use \`/alerts\` for price-based alerts instead.\n\nKeyword requested: "${keyword}"`;
}
function getTimeAgo(date: Date): string {
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
if (seconds < 60) return `${seconds}s ago`;
const minutes = Math.floor(seconds / 60);
if (minutes < 60) return `${minutes}m ago`;
const hours = Math.floor(minutes / 60);
if (hours < 24) return `${hours}h ago`;
const days = Math.floor(hours / 24);
return `${days}d ago`;
}
export async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const command = parts[0]?.toLowerCase() || '';
const rest = parts.slice(1);
switch (command) {
case 'for':
if (rest.length === 0) return 'Usage: /news for <market question>';
return handleNewsForMarket(rest.join(' '));
case 'alert':
return handleAlert(rest.join(' '));
case 'help':
return `**News Commands**
**Browse News:**
/news - Recent market-moving news
/news <query> - Search news by keyword
/news for <market> - Find news for a market
**Alerts:**
/news alert <keyword> - Set up a news alert
**Examples:**
/news trump
/news fed
/news for "Trump 2028"
/news alert "fed rate"`;
default:
// If there's no recognized subcommand, treat entire args as a search query
return handleRecentNews(args.trim() || undefined);
}
}
export default {
name: 'news',
description: 'Monitor news and correlate with prediction market movements',
commands: ['/news'],
handle: execute,
};
Related skills
FAQ
Where does the news come from?
X/Twitter accounts and RSS feeds such as Reuters Politics, AP News, and POLITICO.
What does correlation show?
It matches breaking news to affected markets and tracks price impact and volume spikes.