How it works
HoopAgent: the AI that runs your fantasy team. Where every number comes from, in plain words.
The simulations
A week. Every game left in the week is played for every player on both rosters. Each day the best 10 players who have a game are set in the lineup; a player who then sits leaves his slot empty. Each player plays or not by his odds of playing, and his stats are drawn around his per-game line. FG% and FT% come from total makes and attempts. Games already final count as they happened. The week is played 2,000 times, and win odds are the share of those weeks you win more of the 9 categories (a 4.5 to 4.5 split counts half).
The season. Every matchup left on the schedule gets its category odds from the week sim. Then the rest of the season is played 20,000 times from the current standings. The top 6 make the playoffs and the top 2 get a bye. Each of those seasons then plays the playoff bracket with the real playoff-week schedule. Playoff odds and title odds are how often you make the playoffs and win the bracket.
Same draws. When two moves are compared, both are played with the same random draws (common random numbers): the same player has the same hot or cold night in both. So the difference between them is the move, not luck.
Not modelled. Blowout rest, late scratches, stats that move together, and any roster moves after the one being tested, by you or anyone else.
Are the odds honest?
Before each week starts we save every team's win odds and category odds. When the week is final, each one is checked against what happened. The Brier score is the average squared miss: 0 is perfect, and always saying 50% scores 0.25, so lower than 0.25 beats a coin flip.
Loading the scorecard…
What the noise numbers mean
Every season sim is run twice with different random draws. The noise (the ± after an odds change, in percentage points) is the gap between those two runs.
A change smaller than its noise is a tie: the sim can't tell the two apart, so pick on something else (who you'd rather hold, fewer adds used). A change several times its noise is real.
Week win odds have no ± because every option there shares one run with the same draws, so the gaps between options are steadier than the odds themselves.
Goals
Every list of moves is ranked by one goal, set at the top of Today:
- Win the league (the default): title odds, which means making the playoffs and then winning the bracket.
- Win the next matchup: this week, or next week on this week's last day, when a move can no longer change it.
Playoff odds are shown next to both. A move can help one goal and hurt another; streaming for this week often costs a little for the season.
Where the data comes from
ESPN. Your league's settings, rosters, standings, schedule, free agents, transactions, injuries and live scores. HoopAgent reads all of this from ESPN, and when the bot is on it also writes your lineup changes back to ESPN; see what the bot does.
Box scores. Each player's line is a blend of his games this season with his preseason projection. Recent games count more (their weight halves every 20 days), and minutes lean on recent games so a role change shows up within a couple of games. His chance of playing is his games-played rate, capped at 97%.
News. ESPN's injury list, the NBA's official injury report, RotoWire, and a few NBA reporters on Bluesky and X. An injury status changes the next three days: out 0%, doubtful 15%, questionable 50%, day-to-day 65%, probable 90% chance to play.
Freshness
Each page shows when it was updated under its title. Rosters, projections and plans refresh every 2 hours; injury news is checked every 10 minutes around game time; live scores every 5 minutes during games; the lineup plan is rebuilt before your first game each day. Another team's page is a snapshot and says how old it is. Job status shows when each job last ran, what failed and how old its output is; a red dot next to HoopAgent means something there needs a look.
Newer facts replace older ones. A newer injury status replaces the old one, and the official report wins over a news item that isn't newer. A trade or signing replaces everything said about the player before it. Lines from the news carry their source and date.
League rules HoopAgent follows
Adds. ESPN gives this league 4 adds per 7 days of a matchup: 3 in a 6-day week, 8 in a two-week matchup. Once a day's games have started, an add counts from tomorrow, and on a week's last day that means next week's adds. Every suggested add says which week's limit it uses and how many are left after it.
Positions. ESPN caps how many players of a position a roster can hold. Every suggested add and drop is checked against those caps; the League page lists them.
IR. A healthy player left in an IR slot blocks every other roster change on ESPN, so that move always goes first.
What the bot does by itself
Lineups only, for now. For your team, the bot sets the next lineup ESPN still takes changes for, and only when the starters differ from the plan or someone sits in a slot he can't play. It makes the fewest moves it can and never touches a player whose game has started.
It does not add, drop or move players to or from IR. Those are suggestions; you make each one yourself, and nothing is sent until you approve it on the confirm screen.
Each change is sent once and then read back from ESPN. If one fails, the bot stops for the rest of the day. Its changes show on Today under “The bot made these moves”.