1 view
alsk1992/CloddsBot
Open Source AI trading agent that operates autonomously across 1000+ markets - Polymarket, Kalshi, Binance, Hyperliquid, Solana DEXs, 5 EVM chains. Scans for edge, executes instantly, manages risk while you sleep. Agent commerce protocol for machine-to-machine payments. Self-hosted. Built on Claude.
TypeScript★ 2,558+376 that day#7 on trending
6.5%duplicated code · 19,187 of 295,367 lines
1,523clones in code
590code files of 1,043 scanned
5.85%duplicated over all files · 1,709 clones
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 9 lines in 18 placestypescript51 tokenssrc/agents/index.ts:10969–10977src/agents/index.ts:11188–11197src/agents/index.ts:11201–11209src/agents/index.ts:11289–11297src/agents/index.ts:11299–11308and 13 more
10969 const response = await fetchPolymarketClob(context, 'https://clob.polymarket.com/time'); 10970 const data = await response.json() as ApiResponse; 10971 return JSON.stringify(data); 10972 } catch (err: unknown) { 10973 return JSON.stringify({ error: (err as Error).message }); 10974 } 10975} 10976 10977case 'polymarket_get_address': {11188 const response = await fetchPolymarketClob(context, `https://clob.polymarket.com/markets/${conditionId}/trades`); 11189 const data = await response.json() as ApiResponse; 11190 return JSON.stringify(data); 11191 } catch (err: unknown) { 11192 return JSON.stringify({ error: (err as Error).message }); 11193 } 11194} 11195 11196// ========== ORDER OPERATIONS HANDLERS ========== 11197case 'polymarket_get_order': { - 13 lines in 17 placestypescript50 tokenssrc/agents/handlers/manifold.ts:235–247src/agents/handlers/manifold.ts:412–420src/agents/handlers/manifold.ts:443–451src/agents/handlers/manifold.ts:503–511src/agents/handlers/manifold.ts:526–534and 12 more
235 if (!response.ok) return JSON.stringify({ error: `Multi-bet failed: ${response.status}` }); 236 return JSON.stringify(await response.json()); 237 } catch (err: unknown) { 238 return JSON.stringify({ error: (err as Error).message }); 239 } 240} 241 242// ============================================================================= 243// READ HANDLERS (require auth) 244// =============================================================================412 if (!response.ok) return JSON.stringify({ error: `Auth failed: ${response.status}` }); 413 return JSON.stringify(await response.json()); 414 } catch (err: unknown) { 415 return JSON.stringify({ error: (err as Error).message }); 416 } 417} 418 419// 12. manifold_get_user_portfolio 420async function getUserPortfolioHandler(First 10 of 13 lines, the second copy on the right.
- 16 lines in 11 placestypescript75 tokenssrc/skills/bundled/bags/index.ts:1163–1178src/skills/bundled/clanker/index.ts:716–730src/skills/bundled/kamino/index.ts:545–560src/skills/bundled/metaculus/index.ts:137–147src/skills/bundled/meteora-dbc/index.ts:929–943and 6 more
1163 return `Error: ${error instanceof Error ? error.message : String(error)}`; 1164 } 1165} 1166 1167// ============================================================================ 1168// Main Execute Function 1169// ============================================================================ 1170 1171export async function execute(args: string): Promise<string> { 1172 const parts = args.trim().split(/\s+/);716 return `Update failed: ${error instanceof Error ? error.message : String(error)}`; 717 } 718} 719 720// ============================================================================= 721// Main Execute Function 722// ============================================================================= 723 724export async function execute(args: string): Promise<string> { 725 const parts = args.trim().split(/\s+/);First 10 of 16 lines, the second copy on the right.
7 more
- 7 lines in 12 placestypescript67 tokens
- 13 lines in 6 placestypescript130 tokens
- 12 lines in 7 placestypescript105 tokens
- 90 lines in 2 placestypescript573 tokens
- 54 lines in 3 placestypescript279 tokens
- 8 lines in 12 placestypescript50 tokens
- 15 lines in 7 placestypescript90 tokens
Largest clones over all files, tests and data included
- 9 lines in 18 placestypescript51 tokenssrc/agents/index.ts:10969–10977src/agents/index.ts:11188–11197src/agents/index.ts:11201–11209src/agents/index.ts:11289–11297src/agents/index.ts:11299–11308and 13 more
10969 const response = await fetchPolymarketClob(context, 'https://clob.polymarket.com/time'); 10970 const data = await response.json() as ApiResponse; 10971 return JSON.stringify(data); 10972 } catch (err: unknown) { 10973 return JSON.stringify({ error: (err as Error).message }); 10974 } 10975} 10976 10977case 'polymarket_get_address': {11188 const response = await fetchPolymarketClob(context, `https://clob.polymarket.com/markets/${conditionId}/trades`); 11189 const data = await response.json() as ApiResponse; 11190 return JSON.stringify(data); 11191 } catch (err: unknown) { 11192 return JSON.stringify({ error: (err as Error).message }); 11193 } 11194} 11195 11196// ========== ORDER OPERATIONS HANDLERS ========== 11197case 'polymarket_get_order': { - 13 lines in 17 placestypescript50 tokenssrc/agents/handlers/manifold.ts:235–247src/agents/handlers/manifold.ts:412–420src/agents/handlers/manifold.ts:443–451src/agents/handlers/manifold.ts:503–511src/agents/handlers/manifold.ts:526–534and 12 more
235 if (!response.ok) return JSON.stringify({ error: `Multi-bet failed: ${response.status}` }); 236 return JSON.stringify(await response.json()); 237 } catch (err: unknown) { 238 return JSON.stringify({ error: (err as Error).message }); 239 } 240} 241 242// ============================================================================= 243// READ HANDLERS (require auth) 244// =============================================================================412 if (!response.ok) return JSON.stringify({ error: `Auth failed: ${response.status}` }); 413 return JSON.stringify(await response.json()); 414 } catch (err: unknown) { 415 return JSON.stringify({ error: (err as Error).message }); 416 } 417} 418 419// 12. manifold_get_user_portfolio 420async function getUserPortfolioHandler(First 10 of 13 lines, the second copy on the right.
- 16 lines in 11 placestypescript75 tokenssrc/skills/bundled/bags/index.ts:1163–1178src/skills/bundled/clanker/index.ts:716–730src/skills/bundled/kamino/index.ts:545–560src/skills/bundled/metaculus/index.ts:137–147src/skills/bundled/meteora-dbc/index.ts:929–943and 6 more
1163 return `Error: ${error instanceof Error ? error.message : String(error)}`; 1164 } 1165} 1166 1167// ============================================================================ 1168// Main Execute Function 1169// ============================================================================ 1170 1171export async function execute(args: string): Promise<string> { 1172 const parts = args.trim().split(/\s+/);716 return `Update failed: ${error instanceof Error ? error.message : String(error)}`; 717 } 718} 719 720// ============================================================================= 721// Main Execute Function 722// ============================================================================= 723 724export async function execute(args: string): Promise<string> { 725 const parts = args.trim().split(/\s+/);First 10 of 16 lines, the second copy on the right.
- 7 lines in 12 placestypescript67 tokens
- 13 lines in 6 placestypescript130 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 564 | 289,734 | 1,518 | 19,144 | 6.61% |
| javascript | 12 | 4,102 | 5 | 43 | 1.05% |
| bash | 10 | 804 | 0 | 0 | 0% |
| python | 1 | 296 | 0 | 0 | 0% |
| rust | 2 | 257 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 683 | 308,612 | 1,623 | 20,398 | 6.61% |
| markdown | 151 | 38,964 | 57 | 466 | 1.2% |
| json | 15 | 2,684 | 12 | 349 | 13% |
| javascript | 14 | 4,170 | 6 | 57 | 1.37% |
| text | 114 | 2,556 | 4 | 32 | 1.25% |
| css | 1 | 1,807 | 3 | 39 | 2.16% |
| yaml | 12 | 1,813 | 2 | 28 | 1.54% |
| python | 4 | 1,355 | 1 | 8 | 0.59% |
| markup | 1 | 310 | 1 | 6 | 1.94% |
| bash | 37 | 2,113 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 13, 2026 | #7 | 2,558 (+376) | 1,043 | 365,308 | 1,709 | 5.85% | 6.5% | — | c930628 |
| Sep 12, 2026 | #7 | 2,230 (+626) | 1,043 | 365,308 | 1,709 | 5.85% | 6.5% | — | c930628 |
| Sep 11, 2026 | #3 | 1,785 (+277) | 1,034 | 364,451 | 1,713 | 5.88% | 6.52% | — | 2a9c154 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.