
Router
- 12 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
router is a Claude skill that routes prediction-market orders to the best platform by price, liquidity, fees, and execution quality.
About
This skill routes prediction-market orders to the best platform based on price, liquidity, fees, and execution quality. Developers use /route commands or a TypeScript API to find the best route, compare platforms, analyze fees and liquidity, split large orders, and execute the chosen route. It supports best-price, best-liquidity, lowest-fee, and balanced modes across Polymarket, Kalshi, and Manifold. It is the order-execution layer for a multi-platform trading bot.
- Smart order routing across Polymarket, Kalshi, and Manifold
- Optimizes for best price, best liquidity, lowest fee, or balanced execution
- Compares platforms and splits large orders to reduce slippage
Router 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)
router capabilities & compatibility
- Capabilities
- order routing · platform comparison · order splitting · fee analysis
- Use cases
- trading
- Pricing
- Free
What router says it does
Route orders to the best platform based on price, liquidity, fees, and execution quality.
Smart order routing for best price, liquidity, and execution
npx skills add https://github.com/alsk1992/cloddsbot --skill routerAdd 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
Route prediction-market orders across platforms for best price, liquidity, or fees.
Who is it for?
Choosing and executing the best platform for a prediction-market order across Polymarket, Kalshi, and Manifold.
When should I use this skill?
A user wants the best route for an order, a platform comparison, or to split a large order.
By the numbers
- 4 routing modes (best-price, best-liquidity, lowest-fee, balanced)
- 3 platforms (Polymarket, Kalshi, Manifold)
Files
Router - Complete API Reference
Route orders to the best platform based on price, liquidity, fees, and execution quality.
---
Chat Commands
Route Order
/route "Trump 2028" YES 1000 Find best route for $1000
/route BTCUSDT long 0.5 Route futures order
/route --mode best-price "Fed" YES Optimize for price
/route --mode best-liquidity ... Optimize for fillsCompare Routes
/route compare "Trump" YES 1000 Compare all platforms
/route fees "Trump" Compare fee structures
/route liquidity "Trump" Compare orderbook depthExecution
/route execute <route-id> Execute routed order
/route split "Trump" YES 5000 Split across platforms---
TypeScript API Reference
Create Smart Router
import { createSmartRouter } from 'clodds/router';
const router = createSmartRouter({
// Supported platforms
platforms: ['polymarket', 'kalshi', 'manifold'],
// Default mode
defaultMode: 'balanced',
// Fee structures
fees: {
polymarket: { maker: -0.005, taker: 0.01 },
kalshi: { maker: 0, taker: 0.01 },
manifold: { maker: 0, taker: 0 },
},
});Find Best Route
const route = await router.findBestRoute({
market: 'trump-win-2028',
side: 'YES',
size: 1000,
mode: 'best-price', // 'best-price' | 'best-liquidity' | 'lowest-fee' | 'balanced'
});
console.log(`Best platform: ${route.platform}`);
console.log(`Expected price: ${route.expectedPrice}`);
console.log(`Expected slippage: ${route.expectedSlippage}%`);
console.log(`Fees: $${route.fees}`);
console.log(`Net cost: $${route.netCost}`);
console.log(`Fill probability: ${route.fillProbability}%`);Compare All Platforms
const comparison = await router.compare({
market: 'trump-win-2028',
side: 'YES',
size: 1000,
});
console.log('Platform Comparison:');
for (const platform of comparison) {
console.log(`\n${platform.name}:`);
console.log(` Price: ${platform.price}`);
console.log(` Liquidity: $${platform.liquidity}`);
console.log(` Slippage: ${platform.slippage}%`);
console.log(` Fees: $${platform.fees}`);
console.log(` Net cost: $${platform.netCost}`);
console.log(` Score: ${platform.score}`);
}Split Order Across Platforms
// Large orders split for better execution
const split = await router.splitOrder({
market: 'trump-win-2028',
side: 'YES',
size: 10000,
maxSlippage: 0.02,
});
console.log('Order Split:');
for (const leg of split.legs) {
console.log(` ${leg.platform}: $${leg.size} @ ${leg.price}`);
}
console.log(`Total slippage: ${split.totalSlippage}%`);
console.log(`Avg price: ${split.avgPrice}`);Execute Route
// Execute the routed order
const result = await router.execute(route);
console.log(`Order ID: ${result.orderId}`);
console.log(`Platform: ${result.platform}`);
console.log(`Fill price: ${result.fillPrice}`);
console.log(`Slippage: ${result.actualSlippage}%`);
console.log(`Fees: $${result.fees}`);Routing Modes
// Best price - minimize price paid
const priceRoute = await router.findBestRoute({
...order,
mode: 'best-price',
});
// Best liquidity - maximize fill probability
const liquidityRoute = await router.findBestRoute({
...order,
mode: 'best-liquidity',
});
// Lowest fees - minimize transaction costs
const feeRoute = await router.findBestRoute({
...order,
mode: 'lowest-fee',
});
// Balanced - weighted optimization
const balancedRoute = await router.findBestRoute({
...order,
mode: 'balanced',
weights: {
price: 0.4,
liquidity: 0.3,
fees: 0.3,
},
});Fee Analysis
const fees = await router.analyzeFees({
market: 'trump-win-2028',
side: 'YES',
size: 1000,
});
for (const platform of fees) {
console.log(`${platform.name}:`);
console.log(` Maker fee: ${platform.makerFee}%`);
console.log(` Taker fee: ${platform.takerFee}%`);
console.log(` For this order: $${platform.totalFee}`);
console.log(` Rebate available: ${platform.hasRebate}`);
}Liquidity Analysis
const liquidity = await router.analyzeLiquidity({
market: 'trump-win-2028',
side: 'YES',
});
for (const platform of liquidity) {
console.log(`${platform.name}:`);
console.log(` Best bid: ${platform.bestBid}`);
console.log(` Best ask: ${platform.bestAsk}`);
console.log(` Spread: ${platform.spread}%`);
console.log(` Depth at 1%: $${platform.depth1Pct}`);
console.log(` Depth at 2%: $${platform.depth2Pct}`);
}---
Routing Modes
| Mode | Optimizes For | Best When |
|---|---|---|
best-price | Lowest price | Small orders |
best-liquidity | Fill probability | Large orders |
lowest-fee | Minimize fees | High frequency |
balanced | Weighted combo | Default choice |
---
Platform Comparison
| Platform | Maker Fee | Taker Fee | Notes |
|---|---|---|---|
| Polymarket | 0% | 0% | Zero fees on most markets; 15-min crypto markets have dynamic fees |
| Kalshi | ~0.17% | ~1.2% | Formula-based fees, capped at ~2% |
| Manifold | 0% | 0% | Play money |
---
Best Practices
1. Compare before trading — Always check alternatives 2. Use maker orders — Pay no fees on Polymarket (vs dynamic fees on 15-min crypto markets) 3. Split large orders — Reduce slippage 4. Check liquidity — Don't trade thin markets 5. Account for fees — Polymarket: 0% most markets; Kalshi: ~1.2% average
/**
* Router CLI Skill
*
* Commands:
* /router status - Smart order router status
* /router config - Router configuration
* /router set mode <best_price|best_liquidity|balanced> - Set routing mode
* /router route <order> - Route an order
*/
import type { RoutingMode } from '../../../execution/smart-router';
let routerConfig: { mode: RoutingMode; maxSlippage: number; preferMaker: boolean; allowSplitting: boolean } = {
mode: 'balanced',
maxSlippage: 1,
preferMaker: true,
allowSplitting: false,
};
async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const cmd = parts[0]?.toLowerCase() || 'help';
try {
const { createSmartRouter, PLATFORM_FEES, EXECUTION_TIMES } = await import('../../../execution/smart-router');
switch (cmd) {
case 'status': {
const platforms = Object.keys(PLATFORM_FEES);
const execKeys = Object.keys(EXECUTION_TIMES);
const avgExec = execKeys.length > 0 ? Object.values(EXECUTION_TIMES).reduce((a, b) => a + (b ?? 0), 0) / execKeys.length : 0;
return `**Smart Order Router**\n\n` +
`Mode: ${routerConfig.mode}\n` +
`Enabled platforms: ${platforms.join(', ')}\n` +
`Max slippage: ${routerConfig.maxSlippage}%\n` +
`Prefer maker: ${routerConfig.preferMaker}\n` +
`Order splitting: ${routerConfig.allowSplitting ? 'enabled' : 'disabled'}\n` +
`Avg execution time: ${Math.round(avgExec)}ms`;
}
case 'config': {
let output = `**Router Config**\n\n`;
output += `Mode: ${routerConfig.mode}\n`;
output += `Max slippage: ${routerConfig.maxSlippage}%\n`;
output += `Prefer maker: ${routerConfig.preferMaker}\n`;
output += `Allow splitting: ${routerConfig.allowSplitting}\n\n`;
output += `**Platform Fees (taker/maker bps)**\n`;
for (const [platform, fees] of Object.entries(PLATFORM_FEES)) {
if (fees) output += ` ${platform}: ${fees.takerBps}/${fees.makerBps}\n`;
}
return output;
}
case 'set': {
if (parts[1] === 'mode') {
const mode = parts[2] as RoutingMode;
if (!['best_price', 'best_liquidity', 'lowest_fee', 'balanced'].includes(mode || '')) {
return 'Usage: /router set mode <best_price|best_liquidity|lowest_fee|balanced>';
}
routerConfig.mode = mode;
return `Router mode set to **${mode}**.`;
}
if (parts[1] === 'slippage') {
const val = parseFloat(parts[2]);
if (isNaN(val)) return 'Usage: /router set slippage <percent>';
routerConfig.maxSlippage = val;
return `Max slippage set to ${val}%.`;
}
if (parts[1] === 'splitting') {
routerConfig.allowSplitting = parts[2] === 'on' || parts[2] === 'true';
return `Order splitting ${routerConfig.allowSplitting ? 'enabled' : 'disabled'}.`;
}
return 'Usage: /router set <mode|slippage|splitting> <value>';
}
case 'route': {
const order = parts.slice(1).join(' ');
if (!order) return 'Usage: /router route <platform> <market> <side> <size>\n\nExample: /router route polymarket btc-100k buy 100';
// Parse: platform marketId side size
const [, marketId, side, sizeStr] = parts;
if (!marketId || !side || !sizeStr) {
return 'Usage: /router route <market-id> <buy|sell> <size>';
}
const size = parseFloat(sizeStr);
if (isNaN(size)) return 'Invalid size.';
const { createFeedManager } = await import('../../../feeds/index');
const feeds = await createFeedManager({} as any);
const router = createSmartRouter(feeds, routerConfig);
const result = await router.findBestRoute({
marketId,
side: side as 'buy' | 'sell',
size,
});
let output = `**Routing Result**\n\n`;
output += `Best: ${result.bestRoute.platform} @ $${result.bestRoute.netPrice.toFixed(4)}\n`;
output += `Fees: $${result.bestRoute.estimatedFees.toFixed(4)}\n`;
output += `Slippage: ${result.bestRoute.slippage.toFixed(2)}%\n`;
output += `Maker: ${result.bestRoute.isMaker}\n\n`;
if (result.allRoutes.length > 1) {
output += `**All Routes**\n`;
for (const r of result.allRoutes) {
output += ` ${r.platform}: $${r.netPrice.toFixed(4)} (fees: $${r.estimatedFees.toFixed(4)}, slip: ${r.slippage.toFixed(2)}%)\n`;
}
}
output += `\n${result.recommendation}`;
return output;
}
default:
return `**Router Commands**
/router status - Router status
/router config - Configuration
/router set mode <mode> - Set routing mode
/router set slippage <pct> - Set max slippage
/router set splitting <on|off> - Toggle order splitting
/router route <market> <side> <sz> - Route an order
Modes: best_price, best_liquidity, lowest_fee, balanced`;
}
} catch (error) {
return `Router error: ${error instanceof Error ? error.message : String(error)}`;
}
}
export default {
name: 'router',
description: 'Smart order routing across platforms for best price and liquidity',
commands: ['/router', '/route'],
handle: execute,
};
Related skills
FAQ
Which platforms can it route across?
The default configuration lists Polymarket, Kalshi, and Manifold.
What routing modes are supported?
best-price, best-liquidity, lowest-fee, and balanced weighted optimization.