Scarlet Beast Scarlet Beast Hunting Truth in a World of Shadows
Transmissions
NEWStartup Frameworks are for sale — buy a launch-ready business, not a slide deck.Sep 04 NEWTech’s Tinder — a swipe-to-match deal engine for hardware buyers and sellers — joins the framework catalogue.Sep 04 NEWSignal — the creators network for the people who build the machines (formerly networkedin) — joins the framework catalogue.Sep 03 NEWScarlet Beast Poker is packaged for acquisition — platform, native apps, the Hiss AI and the public API.Sep 03 LIVEBusiness Plans — every scope, timeline and price we quote, in one vault.Sep 01 NEWFree technical audit — one call, no pitch, a written findings list you keep either way.Aug 28 LIVEGROWL — the crypto and forex exchange, plus an algorithmic bot marketplace.Aug 26 LIVEHiss — production poker AI: deep reinforcement learning, computer vision, real-time inference.Aug 22 NEWPerformance engineering — measurable TTFB, LCP and CLS gains on enterprise traffic.Aug 18 NEWAdobe Commerce and Shopify Plus modernization — migrations that ship without downtime.Aug 05 NEWThe technology stack is published — what we run, why we chose it, what it costs.Aug 01 NEWStartup Frameworks are for sale — buy a launch-ready business, not a slide deck.Sep 04 NEWTech’s Tinder — a swipe-to-match deal engine for hardware buyers and sellers — joins the framework catalogue.Sep 04 NEWSignal — the creators network for the people who build the machines (formerly networkedin) — joins the framework catalogue.Sep 03 NEWScarlet Beast Poker is packaged for acquisition — platform, native apps, the Hiss AI and the public API.Sep 03 LIVEBusiness Plans — every scope, timeline and price we quote, in one vault.Sep 01 NEWFree technical audit — one call, no pitch, a written findings list you keep either way.Aug 28 LIVEGROWL — the crypto and forex exchange, plus an algorithmic bot marketplace.Aug 26 LIVEHiss — production poker AI: deep reinforcement learning, computer vision, real-time inference.Aug 22 NEWPerformance engineering — measurable TTFB, LCP and CLS gains on enterprise traffic.Aug 18 NEWAdobe Commerce and Shopify Plus modernization — migrations that ship without downtime.Aug 05 NEWThe technology stack is published — what we run, why we chose it, what it costs.Aug 01
Markets
BTC$79,738▲ +0.40%ETH$2,459▲ +0.41%SOL$103.15▲ +1.63%XRP$1.41▲ +0.48%BNB$763.51▲ +6.83%ADA$0.2165▲ +1.01%DOGE$0.0874▲ +2.81%LINK$11.84▲ +1.76%AVAX$7.54▲ +2.51%DOT$0.9176▲ +7.97%LTC$53.59▲ +6.43%TRX$0.3331▲ +1.43%BTC$79,738▲ +0.40%ETH$2,459▲ +0.41%SOL$103.15▲ +1.63%XRP$1.41▲ +0.48%BNB$763.51▲ +6.83%ADA$0.2165▲ +1.01%DOGE$0.0874▲ +2.81%LINK$11.84▲ +1.76%AVAX$7.54▲ +2.51%DOT$0.9176▲ +7.97%LTC$53.59▲ +6.43%TRX$0.3331▲ +1.43%
GROWL feed
Hiss NN · 03

Architecture

The contract. Any training path — imitation, PPO, CFR distillation — is only useful if it produces something in exactly this shape, because this is what the serving process, the bots and the drivers already expect.

The network

input  86 features  (standardised: x' = (x - mu) / sd, from norm.npz)
   |
tower  Linear(86 -> 384)  + LayerNorm(384) + activation
       Linear(384 -> 384) + LayerNorm(384) + activation
       Linear(384 -> 192)
   |
   +-- policy   Linear(192 -> 6)   action class logits
   +-- betsize  Linear(192 -> 8)   pot-fraction bucket logits
   +-- value    Linear(192 -> 1)   scalar state value

total parameters: 259,599

Deliberately small. It has to run on a CPU that is simultaneously doing computer vision for several handsets, inside a decision budget measured in milliseconds, so capacity is spent on the feature engineering rather than on depth.

Why three heads on one tower

The three questions — what to do, how much, and how good is this spot — share almost all of their evidence. One shared representation means the value head's learning signal also improves the policy head's features, and the value head is what PPO needs to compute advantage. Separate networks would triple the cost and learn the same thing three times.

Action space

HeadWidthClasses
policy6fold · check · call · raise · allin · bet
betsize80.33 · 0.5 · 0.75 · 1.0 · 1.5 · 2.5 · 3.0 · 4.0 × pot
value1scalar

The bet head was trained on a size that never happened

For a long period the bet head learned from data in which a serve-time guardrail overwrote every bet the network chose. It was therefore fitting a size it had never actually played, and no metric said so. It only came right when the action space, the objective and the optimiser were fixed together; fixing any one alone did nothing measurable.

Note also that 3.0 and 4.0 were appended to the bucket list rather than inserted, so older six-wide champions still decode correctly. Widening an ordinal head in the middle silently relabels every historical model.

The 86 features

Grouped by what they describe. The order is the contract — norm.npz's mu and sd are positional, so inserting a feature anywhere but the end invalidates every existing checkpoint.

Board texture — 0…5

00 f$BoardWet
01 f$BoardDry
02 f$ScaryBoard
03 f$BoardHighCardFoldy
04 f$BoardHighCardSticky
05 f$BoardParched

Made hands & draws — 6…19

06 HaveTopPair
07 HaveOverPair
08 HaveSet
09 HaveTwoPair
10 HaveFlush
11 HaveStraight
12 FlushPossible
13 StraightPossible
14 f$HaveStrongMade
15 f$HaveBigMade
16 f$HaveOnePair
17 f$HaveComboDraw
18 f$HaveBigDraw
19 f$HaveWeakDraw

Position & stack — 20…31

20 f$InPositionPost
21 f$InPositionPre
22 f$SPR
23 f$Committed
24 pot_odds
25 f$M
26 f$Mzone
27 f$DeepStack
28 f$ShortStack
29 f$PushFoldStack
30 f$HeadsUpPot
31 f$Is6Max

Action state — 32…39

32 Raises
33 Calls
34 Bets
35 betround
36 iamaggressor
37 isplo8
38 isomaha
39 prwin

Opponent model — 40…56

40 f$Opp_VPIP
41 f$Opp_PFR
42 f$Opp_AF
43 f$Opp_WTSD
44 f$Opp_Hands
45 f$Opp_Known
46 f$Opp_IsNit
47 f$Opp_IsLoose
48 f$Opp_IsStation
49 f$Opp_IsPassive
50 f$Opp_IsAggro
51 f$Opp_IsTAG
52 f$Opp_IsLAG
53 f$Opp_IsFish
54 f$Opp_IsManiac
55 f$Opp_Foldy
56 f$Opp_ThreeBetsLight

Hole-card shape — 57…62

57 hole_hi
58 hole_lo
59 hole_suited
60 hole_pair
61 hole_gap
62 hole_broadway

Exploit reads — 63…68

63 f$Opp_CBet
64 f$Opp_FTC
65 f$Opp_F3B
66 f$Opp_Steal
67 f$Opp_FTS
68 f$Opp_ExploitKnown

Seat & steal — 69…76

69 f$FoldedToMe
70 f$IsBTN
71 f$IsCO
72 f$IsSB
73 f$IsBB
74 f$IsEP
75 f$PlayersLeftToAct
76 f$StealSpot

Players behind — 77…80

77 f$Behind_FTS
78 f$Behind_VPIP
79 f$Behind_ThreeB
80 f$Behind_Known

Range equity — 81…82

81 prwin_range
82 prwin_gap

Street memory — 83…85

83 f$ICheckedStreet
84 f$IBetStreet
85 f$CheckRaiseSpot

How to read this list

The f$ prefix marks features that come from the rule-engine's own vocabulary — the same names its book uses — which is what lets a rule interpreter produce training labels that line up with the network's inputs. The rest are computed directly from the table read. Note how much of the vector is opponent model (17 features) and seat/steal context (8): the hand itself is a minority of what the network sees, which is correct for poker.

Feature gates: the marker files

Feature groups are switched on by the presence of a marker file beside the weights, so a champion records which capabilities it was actually trained with:

MarkerEnables
SIGHTEDmultiway equity — the net can see it is not heads-up
AGG_TRAINEDiamaggressor — who took the initiative
TRAP_TRAINEDstreet memory — what I did earlier this street
EXPLOIT_TRAINEDexploit / steal / players-behind reads

A feature the policy cannot see is not a feature

Exploit features were built, deployed and measured — and were invisible to the policy: adding them changed nothing, because the learning path never credited them. Adaptation itself was worth +196 bb/100 when it worked, so the failure was in learning, not in the features. A marker file records that a group was present; it does not prove the net used it.

Serving

ServicePortRole
hiss-nn-decide8088Champion — the live net
hiss-nn-decide-chal8091Challenger — the A/B candidate
hiss-nn-decide-cfrCFR net, its own A/B slot
hiss-decide8087Rule engine, headless — the teacher and baseline

Artefacts live together and travel together:

model_champion/
  model.pt              raw weights
  model_scripted.pt     TorchScript — what is actually served
  norm.npz              mu, sd  (86 each)  — positional, order is the contract
  profile.json          the style this champion plays (vpip, pfr, af, wtsd, 3bet, …)
  SIGHTED AGG_TRAINED TRAP_TRAINED EXPLOIT_TRAINED    feature gates

Guardrails

Rules that override the network at serve time, each added because the net was reliably wrong in one specific place and could not be trained out of it:

Guardrails blind the gate that judges the net

The preflop rail overwrote the net on ~75% of preflop spots, so 87 of 114 PPO challengers scored exactly +0.00 against the champion. The gate was not being strict; it was being blind. Any guardrail that improves play also removes the evidence that would let you improve the policy underneath — so measure how often each one fires.

Next — rebuild it from an empty machine →

Hiss NN — the poker network, its training ladder and its serving contract. Written so the whole thing can be rebuilt from an empty machine. Figures are from the live system, not from the plan; where the two disagree the plan is annotated.