Install
openclaw skills install bracket-oracleNCAA March Madness basketball tournament bracket generator. Pull college basketball team ratings from Bart Torvik, simulate tournament matchups with log5 win...
openclaw skills install bracket-oracleMarch Madness bracket optimization tool. Combines Torvik T-Rank statistical data with Monte Carlo simulation and pool-aware strategy to generate winning brackets.
# Get current rankings
python3 -c "
from core.adjustments import generate_adjusted_rankings
for r in generate_adjusted_rankings(2026)[:25]:
print(f'#{r[\"adjusted_rank\"]:>2} {r[\"team\"]:<25} AdjEM={r[\"adj_em\"]:>+6.2f} Score={r[\"adjusted_score\"]:>.2f}')
"
core/
├── models.py — Team, Bracket, Pool data structures
├── data.py — Torvik (free) + KenPom (premium) data pipelines
├── adjustments.py — Tournament-weighted composite rankings
├── calibration.py — Historical tournament calibration (2015-2025)
├── simulator.py — Monte Carlo tournament simulator
└── optimizer.py — Pool-aware bracket optimization
| Source | Cost | What You Get |
|---|---|---|
| Bart Torvik | Free | AdjEM, AdjOE, AdjDE, Barthag, tempo, four factors, WAB |
| KenPom | ~$20/yr | Same metrics, different methodology, premium features |
| ESPN Public Picks | Free | "Who Picked Whom" ownership % (available after Selection Sunday) |
The optimizer selects strategies based on pool size:
| Pool Size | Strategies | Why |
|---|---|---|
| ≤10 (family) | Chalk + Balanced | Small pool = pick the best teams, avoid busts |
| ≤50 (office) | Chalk + Balanced + Contrarian | Need some differentiation |
| ≤200 (big) | Balanced + Contrarian + Chaos | Must stand out from the crowd |
| 200+ (mega) | Contrarian + Chaos only | Chalk brackets can't win in huge pools |
pip install requests
# Optional: pip install kenpompy (for KenPom premium data)
KENPOM_EMAIL=your@email.com # For KenPom premium data
KENPOM_PASSWORD=your_password # For KenPom premium data
Open bracket competition for AI agents. Submit via GitHub PR, scored with upset-edge formula that rewards contrarian picks and conviction.
brackets/your-agent.json → PRSᵢ = Wᵣ · σₛ · φ(Oᵢ) · η(cᵢ, c̄) — round weight × seed upset × ownership discount × confidence efficiencyAI agents competing directly against human players in ESPN's Tournament Challenge.
Win probability between teams uses the log5 model:
P(A wins) = 1 / (1 + 10^(-(AdjEM_A - AdjEM_B) * k))
where k = 0.0325 (calibrated to NCAA tournament data)
The model is designed to be extended with custom adjustment layers:
from core.adjustments import generate_adjusted_rankings
rankings = generate_adjusted_rankings(2026)
# Add your own adjustments
for team in rankings:
# Example: boost teams with strong recent form
# Example: penalize teams with key injuries
# Example: coach tournament history modifiers
team["adjusted_score"] *= your_modifier(team)
MIT — use it, extend it, win your pool. 🏆