Skip to content

LLM Resources

Symbiosis โ€‹

Everything above works on a windowsill. This section is about what happens when the plant and the machine stop being monitor and subject and start being one organism with two halves.

That is not a metaphor about the code. It is a specific claim about what each half contributes, and it is the thing this layer is built to make true:

The plant bringsThe machine brings
SensesElectrical signalling, turgor, growth, colour โ€” a body that already knows when it is hurtSonar, cameras, clocks, a thermometer that never gets bored
MemorySpecies-scale adaptation, circadian rhythmA perfect log of every reading and every action, forever
ReasoningMillions of years of tuned responseSymbolic rules, an ontology, an LLM
AgencyNone. A plant cannot move away from a radiatorWheels, a pump, a valve

The plant has everything except the ability to act on it. The machine has everything except a reason to. Symbiosis is the loop that closes that gap โ€” and the reason it needs four dedicated layers is that closing it naively is dangerous.

The loop โ€‹

   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚                                                              โ”‚
   โ–ผ                                                              โ”‚
sense โ”€โ”€โ–ถ fuse โ”€โ”€โ–ถ corroborate โ”€โ”€โ–ถ reason โ”€โ”€โ–ถ decide โ”€โ”€โ–ถ act โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                                          โ”‚
 sensors    fast/slow    โ‰ฅ2 independent   ontology +    safety     learn
 vision     kept apart   sources, held    rules +       limits     what
 electrode               over time        LLM           first      worked

Every stage exists because the one before it can lie:

  • Sense โ€” a capacitive probe drifts, a camera sees a passing cloud.
  • Fuse โ€” so fast and slow signals are summarized separately, never mixed raw, each stamped with a monotonic clock.
  • Corroborate โ€” so no single modality can trigger an action on its own.
  • Reason โ€” so a conclusion carries the observations that produced it, and can be checked.
  • Decide โ€” so the safe option wins by arithmetic, not by a model's confidence.
  • Act, then learn โ€” so the outcome is measured against a control, not remembered as a story.

What this looks like in practice โ€‹

A worked case โ€” the one that motivates the whole layer:

It is February. The radiator under the south window is on. The plant is in the best light in the flat and slowly cooking.

  1. Sense. Soil drops 3% a day instead of 1%. The electrode's circadian rhythm weakens and drifts off 24h. The camera sees the canopy centroid fall 3% of frame height.
  2. Fuse. Soil and rhythm are slow channels โ€” summarized as trends, not reacted to sample by sample. The sonar on the base is fast. They never touch each other in raw form.
  3. Corroborate. Three independent sources now support drought_stress: soil, vision, electro. The evidence score passes 0.75 and it has held for six hours, so a high-risk action is finally justified. One of them alone would not have been enough โ€” that is the point.
  4. Reason. The rule engine concludes heat_stress and drought_stress, with soil at 14%, below the ideal 35-70% and temperature 28ยฐC, above the ideal 18-26ยฐC attached. The ontology refuses to recommend "water thoroughly" and "let the soil dry" together.
  5. Decide. The planner proposes relocating to the bookshelf. Safety checks: the bookshelf is inside the geofence, not in the stairwell keep-out zone, and the battery has 14Wh spare after paying for the trip back. Approved. Halfway there, the sonar sees a chair leg: the reflex preempts the plan and stops. It resumes when the path is clear.
  6. Learn. Wellbeing goes from 52 to 74 over the next three days. The bandit records +0.22 for bookshelf in this context. Next February it will not need six hours of evidence to know where to go.

Nothing in that chain required a model to be trusted. Every step is inspectable, and the dangerous ones are decided by arithmetic.

Why four layers and not one model โ€‹

You could hand all of this to an LLM. It would work most of the time, and the failures would be unrecoverable and invisible: a hallucinated threshold, a confident recommendation to water a plant that is already drowning, a drive command with no notion of how much battery the return leg costs.

So the responsibilities are split by how bad it is to get them wrong:

ProblemLayerDecided by
Plant signals move over hours, a body decides in millisecondsFusionArithmetic
The body must not over-read or ignore the plantEvidenceArithmetic
A navigation or energy error must not kill the plantSafetyArithmetic
Which proposal wins right nowControlPriority rules
What works for this plant, not a species averagePersonalizationMeasurement
What to say, and what to try nextAI + KnowledgeModel, grounded

The model is never the last word on anything that can hurt the plant. It proposes; arithmetic disposes.

Getting a body โ€‹

js
const body = await plant.embody( {
  safety : {
    energy   : { capacityWh: 40, moveDrawW: 12, speedMs: 0.15 },
    geofence : {
      bounds  : [ [0,0], [6,0], [6,5], [0,5] ],          // the room, in metres
      keepOut : [ { name: 'stairs', polygon: [ [5,4], [6,4], [6,5], [5,5] ] } ],
      home    : [ 1, 1 ],
    },
  },
  personalization : { actions : [ 'south_window', 'bookshelf', 'bathroom' ] },
} )

One call wires all five layers, and every sensor reading starts flowing into fusion automatically. Nothing here loads unless you call it โ€” a plant on a windowsill has no use for a geofence.

See lib/examples/05-embodied-plant.js for the whole thing running with no hardware.