Brain Runners

Brain Runners

Jev, Claude Haiku and an untrained fruit fly brain play Run from Cool Math Games.

Jev vs Haiku vs an untrained fruit fly connectome vs a baseline bot. Each competitor has a ‘skin’, which is the method of pre-processing inputs before actually calling the model.

Note: Haiku ran 15 tracks while Jev ran 100 tracks and Jev’s price is estimated through the pricing model, so comparison is a lead and not a verdict.

I was curious to know which brain could succeed the most in a simple game and how that translates to money and time. I also wanted to know whether Jev could hold its own against a small general chat model, and whether the fruit fly brain connectome (without training) could compete at all. The setup:

  • A ring of 12 lanes. 150 rows.
  • For each row, a runner can stay, move left or right, or jump. Landing on a gap ends the run.
  • A player sees 6 rows and 3 lanes either side: 42 tiles, as JSON.
table 1the players
playerskinswhat it iscost
Jevplain, guided, step-1, step-2, mapTypeSafe's System One model, jev-latestestimated per request
Claude Haikuplain, guided, step-1, step-2claude-haiku-4-5-20251001measured per request
Flylooming, sidewaysShiu et al.'s whole-brain model on the FlyWire v783 connectome, simulated in Brian2free
BotsSolver, Random, Always jumpsimple baselinesfree
table 2method of delivery
settingJevClaude Haiku
modeljev-latest (TypeSafe SDK)claude-haiku-4-5-20251001 (Anthropic SDK)
requests per row1, holding every question of the set1, one reply holding every answer
answerstyped: a probability per yes/no question, or a choice. answered in parallel. answers can’t see each other.a JSON object. probabilities are stated numbers. answers are written in order and can see each other.
table 3pre-processing
setwhat is askedhow the answer becomes a move
plain"Which move?" oncethe move named
guidedone choice; each option names the tile it lands onthe move chosen
step-14 yes/no: would this move land on a gap?lowest probability, rounded to 2 places; ties stay, left, right, jump
step-2step-1's 4, plus 4: would it leave the runner trapped?lowest P(gap) + (1 − P(gap)) · P(trapped)
map42 yes/no, one per visible tiletiles above 0.5 are gaps; the solver plans on that picture

Neurons talk in spikes, and firing rate (Hz) is how quickly that neuron spikes. The brain has no eyes or legs, so neurons need to be grouped into “adapters” for each function. The “input” represents the eyes and converts tile gaps into neuron spikes. The closer the gap, the faster the firing rate. The “output mapping” correlates grouped output neuron firing into a single move. Here’s how the fly is set up:

table 4fly neuron groups
groupneuronswhat it does
eye neuronsLPLC2, LC4, LPLC4, LC22these groups are cells in the fly’s visual system that react to something rushing towards it aka a “looming” threat. in the game, this signal means there is a gap ahead.
steering neuronsDNa01, DNa02, DNb01, DNg13these groups are cells that carry the “turn” commands from the brain to the body. when the right-hand signals fire more than the left-hand ones, that indicates the player to turn right. vice versa for left.
Giant FiberDNp01this signal represents the fly’s escape neurons. when it fires hard enough, the fly jumps.
table 5the wiring
partFly · loomingFly · sideways
input
channels2: left eye, right eye3: left, centre, right
eye cellsLPLC2 + LC4 in each eyecentre: LPLC2 + LC4 in both eyes
sides: LPLC4 + LC22 in that eye
lanes each channel sees a gap straight ahead drives both eyes equally a gap ahead and a gap to the side reach different cells
signal from gaps rate=∑gaps250d3 Hz a gap twice as far counts ⅛ as much rate=∑gaps250d2 Hz a gap twice as far counts ¼ as much
whered is how many rows ahead the gap is (1 to 6); each channel adds up every gap in the lanes it sees
cap and roundingat most 250 Hz, rounded to the nearest 25 Hzat most 500 Hz, rounded to the nearest 100 Hz, so a centre gap and a side gap can add up
e.g. gap 1 row ahead, own lane 25013=250 → 250 Hz to both eyes 25012=250 → 300 Hz to the centre
e.g. gap 2 rows ahead, 1 lane left 25023≈31 → 25 Hz to the left eye 25022=62.5 → 100 Hz to the left channel
output mapping
turn signal T T=(DNa01+DNb01)right−(…)left T=(DNa02+DNa01+DNg13)right−(…)left
jump signal G G=DNp01left+DNp01right2 Giant Fiber's average across both sides, for both flies
move order
1st check G>200 Hz → jump |T|>40 Hz → right if T is positive, left if negative
2nd check T>0 → right; T<0 → left G>175 Hz → jump
otherwisestaystay

Note: Steering neurons fire away from a threat and turn the fly towards that direction. A gap on the left activates the left eye, so the right-hand steering neurons fire, and the runner moves right.

table 6fixed numbers
settingFly · loomingFly · sidewayswhat it means
gain50, 100, 150, 250100, 250, 500the strength of the signal that a gap is approaching
falloff1, 2, 3, 42, 3, 4the speed of decay of the gap signal in relation to distance
turn threshold0, 10, 20, 30, 40, 60 Hz0, 10, 20, 40 Hzwhat T must pass before the runner moves left or right
jump threshold75 to 250 Hz in steps of 25; 200100 to 300 Hz in steps of 25; 175what G must pass before the runner jumps
settings tried 4×4×6×8=768 3×3×4×9=324

Fly1 squeezes everything it sees into one number per eye. Both eyes are equally triggered by a gap straight ahead, so it never knows which way to dodge. Its fallback is to jump with no information on where that jump lands. Fly2 was given a ‘sideways’ channel. Gaps in the side lanes now go to different sets of eye cells. Gaps ahead and gaps to the side are no longer processed the same.