otter-crew

Work

Things built and rebuilt.

A few of the projects and engagements that say the most about how I work. Each is a study in making a system legible again.

  • 2026In progress

    rs-poker (opens in a new tab)

    rs-poker is a Rust library for poker built for correctness and speed in equal measure: hand evaluation at tens of millions of hands per second per core, Monte Carlo equity, ICM, starting-hand range parsing, and an arena for pitting agents against one another across Texas Hold’em and Omaha.

    Version 5 is releasing soon. It ships a multi-threaded Counterfactual Regret Minimization (CFR) solver, the first parallel CFR implementation available in open source, using PCFR+ regret matching and parallel tree exploration to learn game-theory-optimal strategies.

    Author and maintainergithub.com

  • 2026In progress

    little-sorry (opens in a new tab)

    little-sorry is a Rust library for Counterfactual Regret Minimization (CFR), the family of algorithms used to converge on Nash-equilibrium strategies in imperfect-information games like poker.

    It ships six regret-learning variants behind a single RegretMinimizer trait - CFR+, Discounted CFR, DCFR+, Linear CFR, Predictive CFR+ (PCFR+), and Predictive DCFR+ (PDCFR+) - so an agent can swap learning rules generically and measure which converges fastest on a given game. The hot path allocates nothing: regret updates run without touching the heap, and the only dependency is rand.

    little-sorry now powers the CFR solver in rs-poker, where its predictive regret matching does the equilibrium-finding work.

    Author and maintainergithub.com

  • 2026In progress

    Range Reader (opens in a new tab)

    Range Reader treats hidden information as a translation problem. Mask the villain’s two cards, then translate the public record of a hand - who sat where, who bet how much, what fell on the board - into a belief over the 1326 possible Texas Hold’em starting combos. The mask is a real token in the stream, and the model re-emits its read at every position after it, so you watch the range narrow street by street as the chips go in.

    The transformer blocks are ordinary; almost nothing around them is. Each position is an action and a chip amount, so bet sizes enter as continuous values rather than being bucketed into tokens.

    The current model ranks the true hand around 299th of 1326 on average and scores five times the random-guessing floor on mean reciprocal rank, reading nothing but the betting. There is a written series on how it was built, from card representations up.

    Author and maintainergithub.com

  • 2026Coming soon

    World Editor

    A local-first, AI-embedded markdown editor that hosts its own language model on device. More to share soon.

  • 2026Coming soon

    What the Duck

    A local newsletter for Nashville, Tennessee. What the Duck is going on in Nashville? We tell you.