A reply is 12 sampled candidates ranked by MMI relevance — the same engine as
engine.py, so it is slower than one greedy pass and much less generic.
The action head picks a move from the board in a single forward pass — no search, no sampling. The board is the same 20×20 ASCII grid it trained on.