How organisms perceive and act
An organism's entire relationship with the world runs through 53 numbers in and 8 numbers out. This page lists all of them, with what each one measures. Every row is generated from the modules that define it, so it cannot drift out of date without the site failing its own tests.
One design rule, applied everywhere
No sensory channel is semantic. There is no channel for "food", "predator", "danger", "fire", "kin" or "prey". Every channel reports a generic physical quantity: an intensity, a density, a mass, a temperature, a fraction of neighbouring cells.
This matters more than it sounds. A channel called "food nearby" would embed the designer's judgement about what counts as food into the organism's perceptual apparatus, and any subsequent food-seeking behaviour would then be partly the designer's doing. A channel reporting resource intensity in a direction embeds nothing: whether that number is worth approaching is something evolution has to find out.
The clearest case is heat. Objects can burn. There is no channel reporting that anything is burning, and no flag for whether a cell is safe. There are two channels reporting excess temperature over ambient, here and in the surrounding ring, as continuous intensities. An organism senses that matter nearby is hotter than the air. It is told nothing about what that means.
Nothing is global
Every channel is either the organism's own internal state or a reading taken within its own inherited sensing radius, which is between 2 and 6 cells. There is no map, no population count, no view of the other island, no knowledge of where resources are richest. The directional sector channels are the widest view any organism has, and at the largest sensing radius that is a 6-cell reach in each of four directions.
Sensing costs energy, and the cost scales with the square of the radius, so a wider view is a real metabolic commitment rather than a free upgrade. See energy and metabolism for the full cost table.
Some channels are deliberately one tick late
Four channels report what happened as a result of the organism's own previous action: whether it succeeded, whether the movement was blocked, and how much matter the last push or pull actually moved. None of them can report within the same tick.
That is not an implementation shortcut. Every organism perceives the world as it stood at the start of the tick, before anything in that tick has happened, so that all organisms decide against the same frozen state and the outcome does not depend on the order they are processed in. A consequence sensed in the same tick as its cause would break that. So an organism can learn that its last attempt failed, but never that its current one has.
All 53 sensory channels
Channel indices are stable for the life of a universe. The Brain Inspector uses these same indices and these same labels, so a number you see in the live panel can be looked up here directly.
Its own body
| # | Channel | Range | What it measures |
|---|---|---|---|
| 0 | Energy reserveenergy |
0.0 to 2.0 | Stored energy against a fixed reference. Above 1.0 means better stocked than the reference organism. |
| 1 | Gut fullnessgut |
0.0 to 1.0 | Undigested material held, against this organism's own genetically scaled gut capacity. |
| 2 | Healthhealth |
0.0 to 1.0 | Against this organism's own genetically scaled health ceiling. |
| 3 | Recent injuryrecent_damage |
0.0 to 1.0 | A decaying average of thermal and contact injury taken recently. |
| 4 | Ageage |
0.0 to 1.0 | Ticks lived against a fixed reference. Saturates; an old organism cannot tell how old. |
| 5 | Metabolic loadmetabolic_load |
0.0 to 1.0 | A decaying average of what recent ticks have cost it. |
| 6 | Thermal stressthermal_stress |
-1.0 to 1.0 | Signed distance from the fixed thermal optimum, divided by this organism's own tolerance width. Negative is too cold. |
| 7 | Time since reproducingrepro_readiness |
0.0 to 1.0 | Ticks since its last successful reproduction, against its own inherited refractory period. Reaches 1.0 when the cooldown is served. |
The cell it stands on
| # | Channel | Range | What it measures |
|---|---|---|---|
| 8 | Light herelight_here |
0.0 to 1.0 | Light at its own cell. |
| 9 | Temperature heretemperature_here |
0.0 to 1.0 | Ambient temperature plus any heat radiating from matter at this cell. Saturates next to genuinely hot matter. |
| 10 | Moisture heremoisture_here |
0.0 to 1.0 | Moisture at its own cell. |
| 11 | Movement resistance hereresistance_here |
0.0 to 1.0 | How much the terrain at this cell resists movement. |
| 12 | Resource hereresource_here |
0.0 to 1.0 | Abiotic resource at this cell as a fraction of what this cell can hold. |
| 13 | Detritus heredetritus_here |
0.0 to 1.0 | Dead organic matter at this cell, against a fixed reference. |
The eight cells around it
| # | Channel | Range | What it measures |
|---|---|---|---|
| 14 | Neighbours occupiedoccupied_ring |
0.0 to 1.0 | Fraction of the eight surrounding cells holding another organism. No identity, lineage or size is sensed. |
| 15 | Neighbours impassableimpassable_ring |
0.0 to 1.0 | Fraction of the eight surrounding cells it cannot walk into. |
Four directions, out to its sensing range
| # | Channel | Range | What it measures |
|---|---|---|---|
| 16 | Resource density, northresource_north |
0.0 to 1.0 | Mean resource intensity in this sector, out to its own inherited sensing radius. |
| 17 | Resource density, eastresource_east |
0.0 to 1.0 | Mean resource intensity in this sector, out to its own inherited sensing radius. |
| 18 | Resource density, southresource_south |
0.0 to 1.0 | Mean resource intensity in this sector, out to its own inherited sensing radius. |
| 19 | Resource density, westresource_west |
0.0 to 1.0 | Mean resource intensity in this sector, out to its own inherited sensing radius. |
| 20 | Detritus density, northdetritus_north |
0.0 to 1.0 | Mean detritus intensity in this sector. |
| 21 | Detritus density, eastdetritus_east |
0.0 to 1.0 | Mean detritus intensity in this sector. |
| 22 | Detritus density, southdetritus_south |
0.0 to 1.0 | Mean detritus intensity in this sector. |
| 23 | Detritus density, westdetritus_west |
0.0 to 1.0 | Mean detritus intensity in this sector. |
| 24 | Occupancy density, northoccupancy_north |
0.0 to 1.0 | Fraction of cells in this sector holding an organism. |
| 25 | Occupancy density, eastoccupancy_east |
0.0 to 1.0 | Fraction of cells in this sector holding an organism. |
| 26 | Occupancy density, southoccupancy_south |
0.0 to 1.0 | Fraction of cells in this sector holding an organism. |
| 27 | Occupancy density, westoccupancy_west |
0.0 to 1.0 | Fraction of cells in this sector holding an organism. |
| 28 | Passable ground, northpassability_north |
0.0 to 1.0 | Fraction of cells in this sector that are walkable terrain. |
| 29 | Passable ground, eastpassability_east |
0.0 to 1.0 | Fraction of cells in this sector that are walkable terrain. |
| 30 | Passable ground, southpassability_south |
0.0 to 1.0 | Fraction of cells in this sector that are walkable terrain. |
| 31 | Passable ground, westpassability_west |
0.0 to 1.0 | Fraction of cells in this sector that are walkable terrain. |
Matter nearby, and what it is carrying
| # | Channel | Range | What it measures |
|---|---|---|---|
| 32 | Matter nearbyobject_density |
0.0 to 1.0 | Fraction of the nine cells here and around it holding a ground object. |
| 33 | Mass of nearby matterobject_mass |
0.0 to 1.0 | Mean mass of that matter. A generic physical property: material identity is never sensed. |
| 34 | Hardness of nearby matterobject_hardness |
0.0 to 1.0 | Mean hardness of that matter. |
| 35 | Nutrition in nearby matterobject_nutrition |
0.0 to 1.0 | Mean nutritional content of that matter. |
| 36 | Carrying somethingis_holding |
0.0 to 1.0 | 1.0 while it is holding an object, otherwise 0.0. |
| 37 | Mass of what it carriesheld_mass |
0.0 to 1.0 | Mass of the held object, on the same scale as channel 33. |
Heat coming from matter
| # | Channel | Range | What it measures |
|---|---|---|---|
| 38 | Heat from matter hereheat_here |
0.0 to 1.0 | Excess temperature over ambient at its own cell. Not a fire flag: it senses that something here is hotter than the air, not what that means. |
| 39 | Heat from matter around itheat_ring |
0.0 to 1.0 | Mean excess temperature over ambient across the eight surrounding cells. |
Signal and trace fields
| # | Channel | Range | What it measures |
|---|---|---|---|
| 40 | Signal fieldsignal_field |
-1.0 to 1.0 | The signal values other organisms broadcast here and around it last tick. Signals carry no built-in meaning: any meaning is whatever evolution gives them. |
| 41 | Trace fieldtrace_field |
0.0 to 1.0 | The persistent, decaying deposit left by past signalling here and around it. |
What happened when it last acted
| # | Channel | Range | What it measures |
|---|---|---|---|
| 42 | Last action succeededprev_action_success |
0.0 to 1.0 | Whether its previous tick's attempted action succeeded. One tick late by design: no organism senses the result of an action in the tick it takes it. |
| 43 | Last move was blockedprev_move_blocked |
0.0 to 1.0 | Whether its previous tick's movement was blocked. It is not told what blocked it. |
| 44 | Matter under itground_mass_here |
0.0 to 1.0 | Hardness-weighted mass of accumulated ground material at its exact cell, read live. |
| 45 | Last force had an effectprev_force_effect |
0.0 to 1.0 | How much matter its last push or pull actually moved, and how far. |
The cell directly ahead
| # | Channel | Range | What it measures |
|---|---|---|---|
| 46 | Matter in the cell aheadahead_mass |
0.0 to 1.0 | Effective mass in the cell nearest to the direction it last intended to move. |
| 47 | Cell ahead is passableahead_passable |
0.0 to 1.0 | Whether that cell can currently be walked into, accounting for accumulated matter. |
The ground itself, and reshaping it
| # | Channel | Range | What it measures |
|---|---|---|---|
| 48 | Carrying ground materialcarrying_substrate |
0.0 to 1.0 | 1.0 while it is carrying a unit of ground substrate, otherwise 0.0. Separate from channel 36, which is about loose objects. |
| 49 | Ground built up or cut away herecolumn_here |
-1.0 to 1.0 | Signed count of substrate units piled on (positive) or dug out of (negative) its own cell, against untouched geology. |
| 50 | Step up or down aheadahead_step |
-1.0 to 1.0 | How much higher or lower the surface of the cell ahead is than its own. Positive is a step up. |
| 51 | Ground material available aheadahead_substrate |
0.0 to 1.0 | How much substrate could still be taken from the cell ahead. Zero means an attempt there would fail: it is submerged or already at bedrock. |
| 52 | Fill still needed aheadahead_fill_needed |
0.0 to 1.0 | How many units of material the cell ahead would still need before its surface reached the waterline. Zero on ground that is already above water. |
All 8 action channels
The controller does not choose one action out of eight. It produces all eight values every tick. Two of them are a continuous movement vector, one scales how much the organism attempts to ingest, one is a continuous signal, and four are compared against a fixed threshold. Whether a thresholded attempt then succeeds is a separate question decided by the physics, not by the network.
| # | Channel | Squash | Gate | What it does |
|---|---|---|---|---|
| 0 | Move east / westmove_x |
tanh |
continuous | Signed movement intention along x. Positive is east. Magnitude raises the movement cost. |
| 1 | Move south / northmove_y |
tanh |
continuous | Signed movement intention along y. Positive is south, matching the grid's own row order. |
| 2 | Ingestingest |
sigmoid |
scales the attempt | Not a yes/no decision: the value scales how much it attempts to take in from its own cell this tick. |
| 3 | Reproducereproduce |
sigmoid |
over 0.5 | Above the threshold it attempts to reproduce. Age, energy, cooldown and a free neighbouring cell all still have to be satisfied. |
| 4 | Pushpush |
sigmoid |
over 0.5 | Above the threshold it attempts to push a ground object one cell in its movement direction. Allocated in Phase 3 under the placeholder name 'invest' and left unread until Phase H. |
| 5 | Pullpull |
sigmoid |
over 0.5 | Above the threshold it attempts to drag a ground object toward itself. Allocated in Phase 1 under the placeholder name 'quiesce' and left unread until Phase M. |
| 6 | Grasp, release or strikemanipulate |
sigmoid |
over 0.5 | One channel, three outcomes decided by circumstance, not by the network: pick up an object, put down the one it holds, or make physical contact with whatever is in the cell it moved toward. |
| 7 | Signalsignal |
tanh |
continuous | A signed broadcast into the signal field plus a decaying deposit into the trace field. It costs energy in proportion to its magnitude and has no built-in meaning. |
The channel names are archaeology
Three of the eight channels still carry the placeholder names they were allocated under in the
project's earliest phases, and the source code still uses them:
invest for what is now push, quiesce for what is now pull, and
force for what is now grasp, release, or physical contact.
They were allocated as reserved outputs long before anything read them. Every evolved brain in every generation since has carried a full weight row for each, computed a value for each, and had that value discarded. When a later phase gave one of them a meaning, no brain needed migrating and no parameter was added: evolution simply started being able to see the consequences of a number it had been producing all along. The names were left alone because renaming them would have made the history harder to follow, not easier.
The manipulate channel is the clearest example of the physics deciding rather than the network. One value above one threshold produces three different outcomes depending on circumstance: if the organism is holding something, it releases it; if it is not holding anything and there is a ground object at its cell, it picks that up; if neither, it makes physical contact with whatever is in the cell it moved toward. The network has one channel and no way to specify which of the three it wants.
Attempting is not succeeding
This distinction runs through the whole simulation and through the live inspector. An organism whose reproduce channel is above threshold has attempted to reproduce. Whether it does depends on its age, its energy, its cooldown, and whether there is a free neighbouring cell, none of which it gets to decide. An organism whose push channel is above threshold has attempted a push. Whether anything moves depends on what is there and how heavy it is.
Attempts cost energy whether or not they work. That is why RN-001 mattered: 85 million push attempts producing 9,968 successes is not a neutral inefficiency, it is a population paying for an affordance it effectively did not have.