Help us shape the future of Go! Take the 2026 Go Developer Survey

pick6

module
v0.3.0-beta.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2026 License: MIT

README

a pixel football with little legs

pick6

Terminal war room for fantasy drafts. Live-syncs Sleeper (and FPL Draft), tracks tiers, and tells you when the RB run means the value's gone.

latest release ci MIT

pick6 in a mock draft

A scripted room drafts, the cliff banner fires, the ranking re-sorts under it; a stops the clock, / finds a player, and tab drops to every number the engine holds. Recorded from the real thing — docs/demo.tape, vhs docs/demo.tape to regenerate.

what it does

  • Survival odds on every player — the chance he's still there at your next pick, by simulating the picks between you and your turn 500 times against your opponents' actual rosters: their open slots, your room's measured appetites, and the measured share of real picks that go to players no board ranks. (-survival=adp falls back to the pure price-curve model.)
  • Tiers that alarm — amber when a tier is probably gone before you act, red when the man on screen is the last of it. Tiers come from your rankings file; where it runs out, they're derived from the value curve.
  • Run detection that isn't noise — four RBs in six picks only fires when it beats what the market itself expected for those picks.
  • Your room, not the market — feeds it your league's past drafts and it reprices survival against how those people actually draft.
  • A verdict, not a spreadsheet — on the clock it names a man and the two or three facts that justify him, in picks and odds rather than abstract points.
  • Two sports, one engine — -sport fpl points the whole thing at a Fantasy Premier League draft (beta). The engine never asks which game it is scoring; it reads your lineup and derives the rest.

install

Download a release (no toolchain needed) — grab the tarball for your platform from the releases page, then:

tar -xzf pick6_*.tar.gz
xattr -d com.apple.quarantine pick6   # macOS only: clears the "unverified developer" block
mv pick6 ~/bin/                       # or anywhere on your PATH
pick6 version

checksums.txt on the release page carries the sha256 of every tarball.

Or with Go:

go install github.com/trisslazaj/pick6/cmd/pick6@latest

That installs to go env GOPATH/bin, which is often not on PATH — GOBIN=$HOME/bin go install ... puts it somewhere that is. Working on the code? go run ./cmd/pick6 <cmd> always runs current source.

quickstart

pick6 fetch                          # 1. pull data (players, adp, values, tiers)
pick6 live <draft_id> -user yourname # 2. sync your live sleeper draft

That's the whole thing. Your draft id is in the url: open the draft room in a browser and it reads sleeper.com/draft/nfl/<draft_id>. -user finds your seat from the draft order; -slot 4 sets it directly if the draft hasn't been seeded yet.

No Sleeper league? pick6 board runs the same war room with you typing the picks.

commands

pick6 fetch — pull the data

Downloads the Sleeper player pool, half-PPR ADP, and player values; joins everything onto Sleeper ids; applies your rankings; caches it all. Run it once before drafting and again on draft morning — inside 12 hours it's served from disk.

pick6 fetch                            # defaults: 12-team half-ppr
pick6 fetch -format ppr                # other scoring
pick6 fetch -rankings my-tiers.csv     # your tiers and points win (see below)

pick6 live <draft_id> — the main event

Polls the draft every few seconds and updates the board in place. Every pick is cross-checked against the snake math; traded picks land on the right roster; a dropped poll self-heals on the next one. Reads your league's real lineup (two flex? superflex?) from Sleeper.

On the clock the board leads with a verdict — the man, his price, his odds, the tier he's the last of — then the field ranked by what the pick is worth.

pick6 board — no feed, same brain

For in-person drafts, or any platform without an API. / finds a player, x marks him gone, u takes it back. Everything downstream is identical — the engine never asks where a pick came from.

pick6 board -slot 7 -teams 10 -lineup "qb rb rb wr wr te flex flex k def" -bench 6

pick6 * -sport fpl — the same war room for an FPL draft (beta)

Fantasy Premier League Draft is a snake draft over a hard-quota squad, so it runs on the same engine with nothing turned off but the machinery that only means something in football.

Beta, and the board says so on every frame. Everything structural is tested — 105 real picks replay across all seven seats of a completed draft with zero desyncs — but the calibration isn't there yet. NFL survival has a referee (pick6 calibrate) and NFL decisions have another (pick6 regret); FPL has neither. Measured against eight completed public drafts, the room model draws too few keepers and defenders and too many midfielders, so a green safe tag on a defender is right about 60% of the time against 81–85% everywhere else. Read it as a very good tier sheet with live odds, and trust the odds a little less on GKP and DEF.

pick6 fetch -sport fpl                   # 1. the pool, from bootstrap-static
pick6 live -sport fpl <league_id> -slot 3 # 2. sync the draft

The id is your LEAGUE id, the one in draft.premierleague.com/…/league/<id>. FPL publishes the draft order nowhere until round one happens, so pass -slot N when you see your seat — -user "your name" works too, from the moment you have made a pick.

Positions are gkp/def/mid/fwd, the squad is 2/5/5/3 with no bench and no flex, and the price is FPL's own draft_rank. A position you have filled to its quota reads def full rather than "bench depth", because there is no bench and the app will not let you draft him. No auth, nothing to expire mid-round.

pick6 board -sport fpl and pick6 tiers -sport fpl work the same way. Notes and rankings csvs live in ~/.config/pick6/notes/fpl/ and ~/.config/pick6/rankings/fpl/, so a football seat file never turns up on a football board.

pick6 mock — watch it think

Replays a scripted draft against the real UI with real players — only the pick sequence is synthetic. -seed N replays the same draft every time; space steps, a autoplays.

Off the clock each ranked row is the position's depth — its best three by value, each with his odds of still being there when you pick — and under the ranking the pane fills with the board behind it: what the room is about to do (expect 10 wr · 7 rb · 4 qb, and the men likeliest gone before you pick — the simulation's rollouts read as picks instead of percentages), and every position's tiers as a row of dots with the taken ones filled in.

pick6 tiers — the tier board, printed

pick6 tiers -pos wr -depth 15
the wr tier board

The paper cheat sheet, but the tool crosses names off by itself: every man at the position, grouped by tier, straight from the cache — no live draft, no -slot, nothing but -pos and -depth to slice it.

the data tab

tab flips any board to the numbers, in views you switch with ←/→: value is every available player and every number the engine holds — value, tier, adp, spread, survival, format gap — with your rankings file's opinions riding the names; adp is the same table by price; tiers is the ladder, every man at every position grouped by tier, the taken struck through; and every rankings csv in ~/.config/pick6/rankings/ (or -rankings <dir>) is a view of its own, shown exactly as the file ranks them — its order, its tiers, its opinions — with nothing added but each man's odds of reaching your pick and a strike once he is gone. The file you gave fetch -rankings is always there. A name the board does not know gets a ?, not dropped.

the data tab the tiers view

Late in the draft, kickers and defenses light up exactly when they should and not a round before:

kicker o'clock

the notes tab

tab again is your own notes, next to the board, so draft night is two screens (this and sleeper) and not three. It is a folder of markdown files — ~/.config/pick6/notes/, or -notes <dir> — rendered with player names in their position colours and struck through as they get taken, beside a map of the draft so far. global.md sits on top of everything; slot-N.md opens itself when you draw seat N; anything else you flip between with ←/→. e opens the current file in $EDITOR. Nothing on it feeds the engine — the notes are your side of the argument, and the board is the other.

the notes tab

An example folder lives in docs/notes-example.

for the curious

pick6 scout profiles each manager's tendencies from your league's cached drafts; pick6 calibrate backtests both survival models against real completed drafts and grades every model choice — the simulation ships because it won that backtest on every draft that could test it fairly. pick6 regret does the same job for decisions, which a survival backtest cannot grade: it replays your own completed drafts with your seat played by each policy in turn — what you really did, best-available, the formula, each of the two scorers — and prints the team each one walked out with. None of the three is needed to draft.

keys

key does
/ search players — taken ones stay in the results with the pick that took them
x / u mark taken / undo (board mode)
tab cycle board → data table → notes
j k / p / ← → scroll / position filter / switch view (data tab)
← → / e switch file / open it in $EDITOR (notes tab)
space / a step / autoplay (mock mode)
q quit

bring your own rankings

A CSV turns the board into your board — its tiers drive the cliff alarms, its opinions ride the names. Column order doesn't matter, unknown columns are ignored, FantasyPros exports load as-is:

name,position,team,tier,points,sentiment
Jahmyr Gibbs,RB,,1,,target
De'Von Achane,RB,,4,,avoid
Philadelphia Eagles,DEF,PHI,,,target
  • tier — your tier lines, kept exactly; oversized tiers are subdivided, never merged.
  • points — projected points; overrides the fetched values.
  • sentiment — target / pass / avoid. Display-only: an avoid badge rides the player's name, and a verdict crowning a man you flagged says so. Rows with only a name, position and sentiment are valid — that's how kicker and defense calls work.

the math

Everything on screen is a probability with a paper trail — an opponent-aware Monte Carlo (rosters, room appetites, and a measured escape rate for picks that leave the ranked board), survival curves per player, an exactly-N correction, expected-best-later urgency, probabilistic tier holds — and every constant was chosen by backtesting against real completed drafts. The whole derivation, the calibration methodology, and the ideas that measured worse and were removed (including the leak that briefly flattered the simulation) live in the engine paper (also attached to every release).

data sources

license

MIT — see LICENSE.

Directories

Path Synopsis
cmd
pick6 command
internal
adp
Package adp fetches ADP from several sources and merges them onto one scale.
Package adp fetches ADP from several sources and merges them onto one scale.
cache
Package cache is a dumb disk cache: fetch a URL, keep the bytes, don't refetch today.
Package cache is a dumb disk cache: fetch a URL, keep the bytes, don't refetch today.
engine
Package engine holds the draft state and the pure math over it: snake arithmetic, roster filling, cliff and run detection.
Package engine holds the draft state and the pure math over it: snake arithmetic, roster filling, cliff and run detection.
fpl
Package fpl talks to the FPL Draft API.
Package fpl talks to the FPL Draft API.
rankings
Package rankings handles name normalization and matching source players onto Sleeper player ids.
Package rankings handles name normalization and matching source players onto Sleeper player ids.
sleeper
Package sleeper talks to the Sleeper API.
Package sleeper talks to the Sleeper API.
ui
Package ui holds the shared lipgloss palette and styles.
Package ui holds the shared lipgloss palette and styles.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL