
Research
- 12 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
research is a Claude skill that researches prediction markets using base rates, resolution rules, and historical analogies.
About
This skill helps research prediction markets using base rates, resolution criteria, and historical analogies. Developers use /baserate, /resolution, and /history commands to look up historical outcome frequencies, understand how a market resolves, and find similar past markets. It covers political, economic, and sports or event markets. It outputs a formatted base-rate analysis with key factors and relevant markets.
- Looks up base rates for political, economic, and sports market outcomes
- Explains market resolution rules and finds historical analog markets
- Formats base-rate analysis with key factors and relevant markets
Research by the numbers
- 12 all-time installs (skills.sh)
- Ranked #781 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
research capabilities & compatibility
- Capabilities
- base rate lookup · market research · historical analysis
- Use cases
- research
- Pricing
- Free
What research says it does
Help users research markets with base rates, resolution criteria, and historical analogies.
Research prediction markets - base rates, resolution rules, historical data
npx skills add https://github.com/alsk1992/cloddsbot --skill researchAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 12 |
|---|---|
| repo stars | ★ 610 |
| Last updated | June 26, 2026 |
| Repository | alsk1992/cloddsbot ↗ |
What it does
Research prediction markets with base rates, resolution rules, and historical analog markets.
Who is it for?
Looking up base rates and resolution criteria to reason about prediction-market outcomes.
When should I use this skill?
A user asks about a base rate, how a market resolves, or similar historical markets.
By the numbers
- 3 command types (baserate, resolution, history)
Files
Research Skill
Help users research markets with base rates, resolution criteria, and historical analogies.
Commands
Base Rate Lookup
/baserate incumbent senators losing
/baserate fed rate cuts when inflation below 3%
/baserate supreme court overturning precedentResolution Rules
/resolution [market-id]Historical Analogs
/history similar to "Trump 2028"Research Areas
Political Markets
- Incumbent win rates by office type
- Primary prediction accuracy
- Polling vs outcome correlations
- Electoral college patterns
Economic Markets
- Fed rate decision patterns
- Recession indicator accuracy
- Inflation forecast track records
- Employment report surprises
Sports/Events
- Historical upset frequencies
- Weather event base rates
- Award show prediction accuracy
Examples
User: "What's the base rate for Senate incumbents losing?" → Historical analysis: 8.2% since 1980 → Key factors: approval rating, scandals, wave elections
User: "How does the market usually resolve for Fed meetings?" → Explain FOMC resolution criteria → Show historical price action around announcements
User: "Has a market like this been wrong before?" → Find similar historical markets → Show when market consensus missed
Output Format
🔬 BASE RATE ANALYSIS
Query: Senate incumbent losing reelection
Historical Rate: 8.2% (47/572 since 1980)
Key Factors:
• Approval < 45%: 23% lose
• Major scandal: 31% lose
• Wave election (opposite party): 15% lose
• First-term incumbent: 12% lose
Relevant Markets:
• Ted Cruz 2024: 52¢ (current)
• Jon Tester 2024: 38¢ (current)
Sources: FEC data, Cook Political Report/**
* Research CLI Skill
*
* Commands:
* /research <query> - Research a prediction market question
* /research baserate <event> - Look up base rates
* /research resolution <market-id> - Resolution rules for a market
* /research markets <query> - Search indexed markets
*/
async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const cmd = parts[0]?.toLowerCase() || 'help';
try {
const { createMarketIndexService } = await import('../../../market-index/index');
const { createDatabase } = await import('../../../db/index');
const { createEmbeddingsService } = await import('../../../embeddings/index');
const db = createDatabase();
const embeddings = createEmbeddingsService(db);
const indexService = createMarketIndexService(db, embeddings);
switch (cmd) {
case 'markets':
case 'search': {
const query = parts.slice(1).join(' ');
if (!query) return 'Usage: /research markets <query>';
const results = await indexService.search({ query, limit: 10 });
if (!results.length) return `No markets found matching "${query}".`;
let output = `**Market Search: "${query}"** (${results.length} results)\n\n`;
for (const r of results) {
const entry = r.item as any;
output += `**${entry.question}**\n`;
output += ` Platform: ${entry.platform} | ID: ${entry.marketId}\n`;
if (entry.probability !== null && entry.probability !== undefined) {
output += ` Current probability: ${(entry.probability * 100).toFixed(1)}%\n`;
}
if (entry.volume) output += ` Volume: $${entry.volume.toFixed(0)}\n`;
output += '\n';
}
return output;
}
case 'baserate':
case 'base-rate': {
const query = parts.slice(1).join(' ');
if (!query) return 'Usage: /research baserate <event description>';
// Search market index for similar past markets
const results = await indexService.search({ query, limit: 5 });
let output = `**Base Rate Research: "${query}"**\n\n`;
if (results.length > 0) {
output += `Found ${results.length} related markets:\n\n`;
for (const r of results) {
const entry = r.item as any;
output += `- ${entry.question}`;
if (entry.probability !== null && entry.probability !== undefined) {
output += ` (${(entry.probability * 100).toFixed(1)}%)`;
}
output += ` [${entry.platform}]\n`;
}
output += '\nThese market probabilities can serve as reference points for base rate estimation.';
} else {
output += 'No similar markets found in index. Try syncing with `/market-index sync`.';
}
return output;
}
case 'resolution': {
if (!parts[1]) return 'Usage: /research resolution <market-id>';
const marketId = parts[1];
const results = await indexService.search({ query: marketId, limit: 1 });
if (!results.length) return `Market \`${marketId}\` not found in index.`;
const entry = results[0].item;
let output = `**Resolution: ${entry.question}**\n\n`;
output += `Platform: ${entry.platform}\n`;
output += `Market ID: ${entry.marketId}\n`;
if (entry.endDate) output += `End date: ${entry.endDate}\n`;
if (entry.description) output += `\nDescription:\n${entry.description}\n`;
return output;
}
case 'stats': {
const stats = indexService.stats();
let output = '**Market Index Stats**\n\n';
output += `Total markets: ${stats.total}\n`;
for (const [platform, count] of Object.entries(stats.byPlatform)) {
output += ` ${platform}: ${count}\n`;
}
if (stats.lastSyncAt) output += `\nLast sync: ${stats.lastSyncAt.toISOString()}\n`;
return output;
}
case 'sync': {
const result = await indexService.sync();
return `**Index Synced**\n\nIndexed: ${result.indexed} markets\n${Object.entries(result.byPlatform).map(([p, n]) => ` ${p}: ${n}`).join('\n')}`;
}
case 'help':
return helpText();
default: {
// Treat as a general research query - search the market index
const query = args.trim();
if (query) {
const results = await indexService.search({ query, limit: 10 });
if (!results.length) return `No markets found for "${query}". Try /research sync to update the index.`;
let output = `**Research: "${query}"** (${results.length} results)\n\n`;
for (const r of results) {
const entry = r.item as any;
output += `**${entry.question}**\n`;
output += ` Platform: ${entry.platform}`;
if (entry.probability !== null && entry.probability !== undefined) {
output += ` | Prob: ${(entry.probability * 100).toFixed(1)}%`;
}
if (entry.volume) output += ` | Vol: $${entry.volume.toFixed(0)}`;
output += '\n\n';
}
return output;
}
return helpText();
}
}
} catch (error) {
return `Error: ${error instanceof Error ? error.message : String(error)}`;
}
}
function helpText(): string {
return `**Research Commands**
/research <query> - Search markets & research a topic
/research markets <query> - Search indexed markets
/research baserate <event> - Base rate estimation from similar markets
/research resolution <market-id> - Resolution rules & description
/research stats - Market index statistics
/research sync - Sync market index
Shortcuts:
/baserate <event> - Base rate lookup`;
}
export default {
name: 'research',
description: 'Research prediction markets - base rates, resolution rules, historical data',
commands: ['/research', '/baserate'],
handle: execute,
};
Related skills
FAQ
What kinds of markets does it research?
Political, economic, and sports or event markets, with base rates and resolution patterns for each.
What does a base-rate lookup return?
A formatted analysis with the historical rate, key factors, relevant markets, and sources.