From machina-sports-sports-skills
Computes sports betting metrics: odds conversion, de-vigging, edge detection, Kelly criterion, arbitrage, parlay analysis, line movement. Analyzes odds from ESPN (American), Polymarket/Kalshi (probabilities).
npx claudepluginhub joshuarweaver/cascade-data-analytics --plugin machina-sports-sports-skillsThis skill uses the workspace's default tool permissions.
Before writing queries, consult `references/api-reference.md` for odds formats, command parameters, and key concepts.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Generates images from structured JSON prompts via Python script execution. Supports reference images and aspect ratios for characters, scenes, products, visuals.
Before writing queries, consult references/api-reference.md for odds formats, command parameters, and key concepts.
sports-skills betting convert_odds --odds=-150 --from_format=american
sports-skills betting devig --odds=-150,+130 --format=american
sports-skills betting find_edge --fair_prob=0.58 --market_prob=0.52
sports-skills betting evaluate_bet --book_odds=-150,+130 --market_prob=0.52
sports-skills betting find_arbitrage --market_probs=0.48,0.49
sports-skills betting parlay_analysis --legs=0.58,0.62,0.55 --parlay_odds=600
sports-skills betting line_movement --open_odds=-140 --close_odds=-160
Python SDK:
from sports_skills import betting
betting.convert_odds(odds=-150, from_format="american")
betting.devig(odds="-150,+130", format="american")
betting.find_edge(fair_prob=0.58, market_prob=0.52)
betting.find_arbitrage(market_probs="0.48,0.49")
betting.parlay_analysis(legs="0.58,0.62,0.55", parlay_odds=600)
betting.line_movement(open_odds=-140, close_odds=-160)
CRITICAL: Before calling any analysis command, verify:
devig before computing edge vs prediction market prices.nba get_scoreboard): Home: -150, Away: +1300.52)devig --odds=-150,+130 --format=american → Fair: Home 57.9%, Away 42.1%find_edge --fair_prob=0.579 --market_prob=0.52 → Edge: 5.9%, EV: 11.3%evaluate_bet --book_odds=-150,+130 --market_prob=0.52find_arbitrage --market_probs=0.48,0.49 --labels=home,awayparlay_analysis --legs=0.58,0.55,0.50 --parlay_odds=600line_movement --open_odds=-140 --close_odds=-160Example 1: Edge check using ESPN and Polymarket prices User says: "Is there edge on the Lakers game? ESPN has them at -150 and Polymarket has them at 52 cents" Actions:
devig(odds="-150,+130", format="american") → fair home probability ~58%find_edge(fair_prob=0.58, market_prob=0.52) → edge ~6%, positive EVkelly_criterion(fair_prob=0.58, market_prob=0.52) → optimal bet fraction
Result: Present edge percentage, EV per dollar, and recommended bet size as % of bankrollExample 2: Arbitrage opportunity detection User says: "Can I arb this? Polymarket has home at 48 cents and Kalshi has away at 49 cents" Actions:
find_arbitrage(market_probs="0.48,0.49", labels="home,away")arbitrage_found in result
Result: If arbitrage: present allocation percentages and guaranteed ROI. If not: present overround and explain no guaranteed profitExample 3: Parlay evaluation User says: "Is this 3-leg parlay at +600 worth it?" Actions:
parlay_analysis(legs="0.58,0.62,0.55", parlay_odds=600)
Result: Present combined fair probability, edge, EV, +EV or -EV verdict, and Kelly fractionExample 4: Line movement interpretation User says: "The line moved from -140 to -160, what does that mean?" Actions:
line_movement(open_odds=-140, close_odds=-160)
Result: Present probability shift, direction, magnitude, and classification (sharp action, steam move, etc.)Example 5: De-vig a standard spread User says: "What are the true odds for this spread? Both sides are -110" Actions:
devig(odds="-110,-110", format="american")
Result: Present each side as 50% fair probability, vig is ~4.5%Example 6: Odds format conversion User says: "Convert -200 to implied probability" Actions:
convert_odds(odds=-200, from_format="american")
Result: Present 66.7% implied probability and 1.50 decimal oddsget_oddscalculate_evfind_edge or evaluate_bet instead.compare_marketsmarkets skill for cross-platform comparison.If a command is not listed in references/api-reference.md, it does not exist.
Error: ValueError: unknown format when calling convert_odds
Cause: The from_format parameter is not one of american, decimal, or probability
Solution: Use exactly american, decimal, or probability as the format string
Error: find_edge returns negative EV when a positive edge is expected
Cause: Fair probability and market probability may be reversed, or de-vigging was skipped
Solution: Run devig on sportsbook odds first, then pass the de-vigged fair_prob to find_edge
Error: find_arbitrage shows no arbitrage even when prices seem low
Cause: Prices may sum to more than 1.0 when all outcomes are correctly included
Solution: Verify you are using the correct probabilities for all outcomes; check total_implied in the result
Error: Kelly fraction is very high (greater than 0.5)
Cause: Edge estimate is very large — often from a miscalculated fair probability
Solution: Use half-Kelly or quarter-Kelly for conservative sizing. Re-verify fair probability via devig