Skip to content

salary-cap-draft

Interactive salary-cap (auction) draft cockpit (V2). Loads your league from Yahoo or Sleeper, or synthesizes a fully mock league with no real platform (--platform generic, the default), builds a board with VORP-driven dollar values + market inflation, and presents a snake-parity REPL: nomination drain-score, hypothetical bid analysis, per-team budget tracking, and an auto-pilot mock simulator. Persists pick history to a CSV so you can pause and resume.

Usage

salary-cap-draft --team "My Team" [options]

The first time it asks whether you want to use your Yahoo/Sleeper team names or customize them (skipped for --platform generic, which has no real team names to offer); subsequent resumes pick up team names from the in-progress CSV.

Common recipes

# Live mock auction from scratch, default $200 cap (--platform generic,
# 12 teams, PPR scoring -- prompts for both if not passed)
salary-cap-draft --team "My Team"

# Custom cap and minimum bid
salary-cap-draft --team "My Team" --salary-cap 300 --min-bid 2

# Mock auction with a specific team count and scoring system
salary-cap-draft --team "My Team" --num-teams 10 --mock-scoring half_ppr

# Draft against your real Yahoo league instead of a mock
salary-cap-draft --team "My Team" --platform yahoo

# Pre-draft for an upcoming season (--platform yahoo)
salary-cap-draft --team "My Team" --platform yahoo --season 2026

# Draft against a Sleeper league instead
salary-cap-draft --team "My Team" --platform sleeper --sleeper-league-id 123456789

# Mock-draft against a Sleeper league that's already mid-season (its real
# rosters would otherwise look like keepers)
salary-cap-draft --team "My Team" --platform sleeper --sleeper-league-id 123456789 --fresh-draft

# Keeper league: CSV with name,fantasy_team,salary (last year's price)
# Final keeper price = salary + --keeper-surcharge (default $5)
salary-cap-draft --team "My Team" --keepers keepers.csv

# Resume a paused draft
salary-cap-draft --team "My Team" --inprogress DraftProgressSalaryCap.csv

Required flags

Flag Meaning
--team Team to draft for — Yahoo team name (--platform yahoo), the Sleeper team/manager display name (--platform sleeper), or whatever you want to call your team (--platform generic)

Common flags

Flag Default Meaning
--salary-cap 200 Per-team auction cap
--min-bid 1 Minimum bid per player
--season most recent completed Yahoo season year. Pass explicitly before the season starts (e.g. --season 2026 in May 2026). Ignored with --platform sleeper/generic — neither is tied to a real, season-scoped league
--platform generic Fantasy platform backend: yahoo, sleeper, or generic (fully synthetic mock draft, no real league — see issue #47)
--sleeper-league-id — Numeric Sleeper league ID (from the league URL). Required with --platform sleeper
--num-teams 12 Number of teams for a --platform generic mock draft. Prompted for interactively if not given
--mock-scoring ppr Scoring system for a --platform generic mock draft: standard, half_ppr, or ppr. Prompted for interactively if not given
--roster-spots fixed default shape Custom roster shape for a --platform generic mock draft, as comma-separated POSITION=COUNT pairs, e.g. QB=1,RB=2,WR=2,TE=1,W/R/T=1,K=1,DEF=1,BN=7 (flex codes: W/T, W/R/T, Q/W/R/T for superflex). Prompted for interactively if not given
--fresh-draft off Ignore each team's current roster and treat every player as available, instead of preserving it as a keeper — useful for mock-drafting a Sleeper league that already has real, mid-season rosters
--keepers — Path to keepers CSV. Columns: name, fantasy_team, salary (last year's winning price)
--keeper-surcharge 5 Dollars added to each keeper's last-year salary. Set to 0 to treat the CSV salary as the final keeper price
--exclude — Comma-separated player names to filter out of views
--inprogress — Path to a DraftProgressSalaryCap.csv from a paused draft. Also accepts the legacy V1 format (salary column)
--output DraftProgressSalaryCap.csv (or --inprogress path) Where to save the running pick log
--payouts — Comma-separated 1st/2nd/3rd payouts
--refresh-cache off Bypass the local nflreadpy cache and force a fresh download of stats/schedule/roster data for this run (see caching)

View tuning

Flag Default Meaning
--limit-per-position 5 Rows per position in the best view
--nominate-limit 10 Rows in the nominate drain-score view
--simadd-limit 3 Default players per position simulated by simadd (also prompted per-run)

Interactive commands

Once running, the prompt accepts:

Command What it does
<player name> Tab-completes; starts a real nomination — prompts for winning team and bid
best Top-N per position by need-adjusted VORP, with salary_value, inflated_value, and max_my_bid
nominate Drain-score ranking: high market value, low fit for you (nominate these to drain opponents' budgets)
whatif Re-rank best after a hypothetical bid on a given player
lookup Detailed view of one player (drafted or available)
roster My Team's picks with bids paid
budgets Per-team budget status — remaining $, slots filled, max bid
exclude Add a player to the per-session exclude list
sim Run a full season simulation with current rosters
simadd Sim top-N available per position, each at its max_my_bid; ranks by win/playoff/earnings delta from baseline
random Auto-simulate one nomination + bidding round (Vickrey-style)
random til full Auto-simulate the rest of the draft to completion
go back Revert the previous pick
help Full command list
exit Quit (progress is already saved on every pick)

Tab completion is on for player names and team names where applicable.

Keeper CSV format

name,fantasy_team,salary
Christian McCaffrey,My Team,45
Justin Jefferson,The Algorithm,50
  • salary is last year's winning price. The actual keeper cost charged against the team's cap is salary + --keeper-surcharge (default +$5).
  • fantasy_team accepts your original Yahoo team name as an alias for My Team (the CLI renames your team during setup).
  • Cap validation fires at startup: if a team's total keeper spend would leave fewer dollars than they need to fill remaining slots at --min-bid, the CLI hard-errors with a fix-up message before the draft begins.

Output

DraftProgressSalaryCap.csv is rewritten on every pick (columns: name, fantasy_team, winning_bid). To resume after a crash, pass it via --inprogress. The format is stable; rotating between machines mid-draft works as long as you keep the file in sync.

Legacy V1 progress files (with salary instead of winning_bid) are accepted automatically — the column is renamed transparently on load.

See also

  • snake-draft — snake-draft cockpit; the salary-cap side mirrors its UX.
  • draft-prep — run before the draft for tiers, values, and VORP.
  • API: fantasyfb.drafts — compute_salary_values, MockSalaryCapDraft, backtest_salary_values, salary-cap cockpit views.