NLHB.EXE — Operator Notes [Read Only]
C:\> home
README.TXT — Eight Years In

What our crew has learned shipping NL Holdem bots since 2017

A beige CRT workstation — the kind of console our first NLHE bot rig ran on in 2017.

Answer first: over eight years of running no-limit Holdem bots, our team has learned that the decision engine is roughly twenty percent of the work. The other eighty percent is the operations layer — seat allocation, kill-switches, agent reconciliation, and the dull discipline of assuming the detection surface moves under you every quarter. This page is our handbook, written the way we wish someone had written it for us in 2017.

System info
  • Operator since: Q3 2017
  • Game format: 6-max and HU no-limit Texas Hold'em
  • Stakes range: micro through low mid-stakes; we do not touch high-stakes tables
  • Audience for these notes: club managers, agents, technical operators

The operations layer is the product

When we started, we believed what most newcomers believe: that a strong solver-trained policy was the bottleneck. It was not. The bottleneck is, and has always been, the unglamorous infrastructure around the policy. We have shipped models with mediocre exploitative range and made money. We have shipped excellent policies that bled out because seat assignment was racy or because reconciliation between a player's agent ledger and our internal counters drifted by two big blinds an hour.

If we had to compress eight years into one sentence: treat the decision engine as a library, not a product. The product is the supervisor that decides when the library is allowed to play.

What "operations" actually means

+--------------------------------------------------------------+ | OPERATIONS LAYER | +---------------+-----------------+------------+---------------+ | SEAT ALLOC | KILL-SWITCH | RECONCILE | TELEMETRY | +---------------+-----------------+------------+---------------+ | who plays | pull the plug | ledger vs | per-room | | where, when, | on signal | internal | health, lag, | | and how long | (manual+auto) | counters | win-rate | +---------------+-----------------+------------+---------------+ | | | v v v +------------------- DECISION ENGINE ------------------+ | policy lookup, range solver, sizing, timing model | +------------------------------------------------------+

The detection surface moves under you

The single most useful thing we tell new operators is this: the detection surface is not a static thing you defeat once. Platforms ship new behavioural fingerprints quietly. They will not announce it. The first signal you get is a wave of accounts going anomalous within hours of each other.

Field note — March 2024 We had a session where a platform pushed a client-side timing-jitter detector overnight. Our entire fleet went anomalous in twelve hours. Recovery took six weeks of policy retraining and execution-layer rewrites. The lesson was not "we need better jitter." The lesson was that anything which is one statistical test away from being measured will eventually be measured.

Three rules we wish we had in 2017

  1. Build the kill-switch before the strategy. Our first system had no graceful stop. When we needed to pull the fleet, we killed processes manually, mid-hand. We left half-played pots and half-acknowledged actions. That alone created a behavioural fingerprint a platform could have queried.
  2. Reconcile every hour, not every day. Drift between agent ledgers and the internal counter is not a bookkeeping issue. It is the earliest signal that something — a stuck hand, a UI quirk, a desync — is producing actions that should not exist.
  3. Assume the policy will need to be retrained on a quarter's notice. Our retraining cadence used to be "when we feel like it." Now it is calendared. Every quarter we re-baseline against fresh hand histories, current sizing trends, and any leaks the previous quarter introduced.

What we will not do

We do not run on high-stakes public tables. We do not run on regulated US-licensed sites. We do not promise a number to anyone. If a club owner asks us "how much per month" before we have looked at their pool, we walk. The teams that take the meeting on price alone are the teams that show up in detection waves with their bankrolls stuck behind a frozen cashier.

Who this site is for

It is for club managers and serious operators who want to talk to a crew that has been through several detection cycles and is still here. It is not a marketing site, and it is not a how-to for hobbyists. The two subpages — Cash vs Tournament and Our Stack — go into operational specifics. The contact button at the top is where the actual conversation starts.

If you run a club or an agent network and want to talk to operators, not a sales desk:

Deal us in

About these notes

Everything on this site is written from operator memory and operator logs, not from a vendor brochure. Where we name a specific year, we mean that year. Where we describe a recovery, the timeline is real. We have anonymised the platforms and the people, because we should, and we have generalised the numbers, because we must.

Ready
8 yrs · NLHE
README v.2026.06