article
I Simulated a Fly's Escape Reflex on Its Real Wiring, Then Started Cutting Neurons
Google and HHMI Janelia just shipped the largest, most complete nervous system ever mapped in an animal — one fruit fly, 166,700 neurons, 125 million synapses, brain to nerve cord, fully wired. Very “what if this is all a simulation” energy. So instead of reading the papers, I pulled the wires.
The circuit
Buried in that dataset (male-cns:v1.0, released September 2026) is the fly’s actual bullet-time reflex: two visual neuron types — LC4, which encodes how fast something is approaching, and LPLC2, which encodes how big it already looks — both synapsing directly onto a single giant fiber neuron that triggers the jump-and-flight escape response. It’s one of the best-characterized circuits in neuroscience (Ache et al. 2019, Current Biology), and now it’s fully reconstructed at the synapse level for both a male fly and, via the matching hemibrain:v1.2.1 dataset, a female one reconstructed almost a decade earlier.
I pulled the real connectivity for both sexes straight from neuPrint — not approximated:
male (male-cns:v1.0) |
female (hemibrain:v1.2.1) |
|
|---|---|---|
| LC4 neurons | 126 | 71 |
| LPLC2 neurons | 185 | 85 |
| Giant fiber | 2 | 1 |
| real synaptic connections | 20,684 | 9,503 |
Running the wiring, not training a model
The simulator (sim/circuit.py) is a small leaky-integrate-and-fire network. Synapse counts between two real neurons become a normalized connection weight; LC4 and LPLC2 — which have no incoming synapses in this circuit — are treated as graded input sources, everything downstream is a standard spiking unit driven by that weighted input:
totals = raw.sum(axis=1, keepdims=True)
is_source = totals.flatten() == 0
totals[totals == 0] = 1.0
weights = (raw / totals) * SYNAPSE_GAIN
No training, no gradient descent, no learned parameters anywhere — just the source code of a real nervous system, executing.
The real question
Deleting an entire neuron type is a trivial result; of course a fly can’t dodge with no eyes. The actual question is how much of the population you can lose before it matters — so analysis/dose_response.py randomly silences a growing fraction of real LC4 or LPLC2 neurons (each one an individually-wired real cell, not a synthetic average) and measures escape probability across 15 random subsets × 30 predator speeds, for both sexes:
| % of population silenced | male LC4 | male LPLC2 | female LC4 | female LPLC2 |
|---|---|---|---|---|
| 0% (intact) | 88% | 83% | 100% | 100% |
| 5% | 9% | 10% | 0% | 7% |
| 10% | 1% | 0% | 0% | 0% |
The cliff, not a slope
Silencing 1 in 20 real neurons in either population collapses escape probability by 80–90%. By 1 in 10, it’s gone almost entirely — in both independently-reconstructed sexes, built from datasets a decade apart. Hundreds of millions of years turning this reflex into evolution’s own bullet-time, and the actual margin for error is “please don’t lose 1 neuron in 20.” There’s no rerouting, no graceful degradation, no moment where the circuit finds another path — the wiring is the program, and cutting it just stops the program from running.
I didn’t train anything. I executed code that already existed, in a working nervous system, and watched its dodge glitch out and fail to load.