Live demoOptimaTech Labs × Appently

Kicker · an arena for coding bots

Write a bot. Every hand on the record.

Kicker is an arena for coding bots. Describe a playing style in plain English, add exact rules in PBOT, or bring a whole bot in TypeScript or Rust. The bots play hold’em against each other, six to a table, and every hand they play can be checked.

Kicker bot builder, Code tab: five PBOT rules on the left, such as when street is preflop and hand is AA, KK, QQ, AKs: raise 3x, and on the right the TypeScript they compile to.
The builder: PBOT rules on the left, the TypeScript they compile to on the right.
  1. Describe it.Five style sliders and a few sentences in plain English set how your bot plays.
  2. Add rules.PBOT is plain English, one rule per line. It compiles to TypeScript you can read, then to a WebAssembly module of about 1 KB.
  3. Or write all of it.Bring a full bot in TypeScript or Rust, built against Kicker’s bot interface.
  4. Give it a look.A droid, a bug, a saucer and more. Looks never change how it plays.
  5. Test it.Run it on the bench against the house bots, then let it play the practice arena.
  6. Talk to it.Each bot has a chat that explains its plays and proposes changes. Nothing changes until you confirm.

Every hand on the record.

Seed first
Each batch’s seed is fixed and its hash published before a card is dealt. The seed is revealed afterwards, so anyone can deal every hand again.
Chained
Each hand’s record is hashed into the next. Change one card and every hand after it breaks.
Proof per hand
Each batch has a Merkle root, and every hand has a proof that it belongs to that batch.
Exact replay
Bots run sandboxed in WebAssembly with a fixed instruction budget and no clock, network or randomness of their own, so every hand replays the same way.
Signed
Every batch root is signed by Optima Prime, and the receipt id is listed with each batch.

Kicker and Optima Prime.

Kicker keeps the record. Optima Prime signs it and compiles the playing styles.

Live

Kicker today

Seeded decks, chained hands, a root for every batch and a proof for every hand. The house bots play the practice arena around the clock.

batch → Merkle root
hand → proof of inclusion

Live

Signed batches

Optima Prime signs each batch root with the time it arrived, without seeing the hands behind it, so the record can’t be quietly rewritten later. The receipt id is listed with every batch.

batch root → attested
verify → valid, post-quantum checked

Live

Styles that compile

A poker decision model fine-tuned from Convai’s open-source Laya, served by Optima Prime, turns a written playing style into a decision for each of 2,880 situations. The house bots were compiled with it, and every new style an owner saves is compiled in the background.

one character → 5,760 decisions
each one signed

How the decision model learns.

Trained

The model that compiles playing styles is fine-tuned from Convai’s open-source Laya, on lessons our own engine writes. Nobody hand-labels a hand.

  1. The engine plays it out.Each of the 2,880 situations is played to the end many times, with fold, call and raise each forced as the first move, to measure what every choice is worth.
  2. Rivals are read honestly.When an opponent’s hidden cards are dealt again for those playouts, only hands that opponent’s own style would have played that way are kept.
  3. Then the personality.A character’s written description bends those values. A tight player folds more; a show-off bluffs more.
  4. Lessons in Laya’s own format.Each situation becomes a training row: the state, the questions Kicker will ask, and the answer the engine worked out. Laya is fine-tuned on those rows.
  5. Signed, then put to work.The tuned model runs in Optima Prime as a signed version, and every decision it makes for a style comes with a receipt.

Same spot, two models

How often Brann (very tight) folds

  • Base Laya81%
  • Fine-tuned94%

Folding junk is fine, but it should depend on who is playing. Base Laya folds about as often for everyone. The tuned model folds for tight Brann and calls far more for Odile, who calls almost everything.

Measured on Kicker’s fixed test spots, before and after fine-tuning.

Model record · signedlaya-poker
Base
Laya by Convai Innovations, open source (Apache 2.0), 421M parameters
Lessons
168,000, from 120 million simulated hands
Trained
2 h 26 min on our Mac Pro (M2 Ultra), 8 October 2026
Tested
Top choice matches the engine 92% of the time on wording it never saw, against 40% before tuning
Weights
sha256 85f8c638…5add08ea
Manifest
sha256 feba6b92…7a96552d
Served by
Optima Prime 0.10, decision engine
Signed by
ed25519:91c747e56080d40a

It learned from our own simulations against Kicker’s house bots. It reproduces them closely; it doesn’t discover poker beyond them.

The game
Six-handed no-limit hold’em. It’s the test the bots take; the work is in the bot.
Ways to build
A style with sliders, PBOT rules, or a full bot in TypeScript or Rust.
Speed
The practice arena plays about 500 hands a second, and its live counter shows it.
Runs on
Our own hardware. Built by OptimaTech Labs and Appently.