Wiki · The Colony & the Method
Runtime Boundary & Jido Alignment
How to read this page
Three ways to read this page. Precise is the document itself, exactly as it is written in the repository. Plain and Clear were written for this website to help you meet that document — they are about it. They are not it, and they are not evidence.
Eighty-four pages about the colony. Each agent is an Elixir process holding a generative model and doing inference, attached to a body that logs into a Minecraft world as an ordinary player. Around that sit the broadcast suite that films them and the runbooks that keep the whole thing running. There are typed specifications for each organ of the model, plus the world and genome specs. There are also the adversarial review personas used to attack a proposed change before it ships.
It is for the reader curious how a running system is put together and how it is held to account. The accountability half is the more distinctive. There is a lab protocol governing evidence and attribution, and a claim fence that restricts the vocabulary a claim is allowed to use. There is a public gate log. And there is a standing invitation to reproduce any verdict from the commit and the seed named in its receipt.
Start with the public read, then the lab protocol, then the falsification invitation. If you want the mathematics rather than the operations, go straight to the typed organ specs.
What it is not: a description of a mind, and not all one kind of document. A large part of this corpus is design and planning — specs marked as proposed rather than applied, organs designed but not built, plans that were later superseded — and each page states which it is. A specification is not a running system, and these pages are careful about the difference; the reader should be too. Eight documents were withheld from publication because they describe private infrastructure.
Your browser cannot switch reading levels, so the document itself is shown.
Precise — the source document
This is the document. Rendered from the repository at the commit above, with nothing rewritten for the web. A gate re-renders it on every deploy and fails the build if a single byte differs.
This document is the binding mapping between the Jido runtime contract (studied
from the vendored agentjido/jido, v2.2.0) and this repository. The Jido
materials are treated as the primary runtime/agent-architecture authority.
The Jido contract (as we apply it)
From Jido's README and usage-rules.md:
- Agents hold state and implement
cmd/2.- Actions do work and transform that state.
- Signals route events into the system.
- Directives describe effects for the runtime to execute.
- The purity boundary is the agent's decision logic.
We preserve every invariant the spec enumerates:
| # | Jido invariant | Where enforced |
|---|---|---|
| 1 | Signals are the primary communication unit | SP.Core.Signal (CloudEvents-shaped); the only thing agents consume |
| 2 | Sensors bridge external events → signals | SP.Body.Sensor.transduce/3: Event → Sensor → Signal → Consumer |
| 3 | cmd/2-style logic is pure |
SP.Agent.decide/3 returns {directives, state}; performs no effects |
| 4 | Directives are pure descriptions of effects | SP.Core.Directive.* are inert structs; only SP.Sim interprets them |
| 5 | State operations are internal only | SP.Body updates (metabolize, develop, grow) never touch the world |
| 6 | Cross-agent comms via signals, not shared state | spawned probes communicate by Emit/Schedule directives, not direct writes |
| 7 | Distinguish ephemeral vs durable children | Directive.SpawnWorker (ephemeral probe) vs durable pods (documented below) |
| 8 | Layered testing, no sleep-flakiness | pure tests + SP.Sim integration tests; logical time only, no Process.sleep |
Mapping table
| Jido concept | This repo |
|---|---|
Jido.Signal (CloudEvents) |
SP.Core.Signal — specversion/id/type/source/subject/time/datacontenttype/data |
Jido.Sensor |
SP.Body.Sensor (pure transducer per modality) + live adapter (below) |
Jido.Agent + cmd/2 |
SP.Agent behaviour + decide/3 (the pure decision function) |
Jido.* directives |
SP.Core.Directive.{Actuate,Emit,Schedule,SpawnWorker,StopChild} |
Jido.Agent.Directive.SpawnAgent/StopChild |
Directive.SpawnWorker / Directive.StopChild |
Jido.AgentServer (runtime) |
SP.Sim (pure interpreter) → live SP.Runtime adapter (below) |
| StateOps (internal update) | SP.Body / SP.Sim state transitions (never world-facing) |
Why SP.Sim is the runtime (and is pure)
In the pure core, SP.Sim plays the role Jido's AgentServer plays at runtime:
it is the only component that interprets directives and applies effects
(SP.World.Actions, body inventory updates, child orchestration). Keeping it a
pure function of (episode) → episode is what makes the whole benchmark
reproducible and offline-testable. The agent's decide/3 is the pure cmd/2
boundary; the interpreter is the runtime.
Live Jido GenServer adapter (integration specification)
The pure core stays dependency-free; the live runtime is a thin, mechanical
wrapping that adds {:jido, "~> 2.2"} and runs the same data types under
Jido.AgentServer. The bridge is 1:1 and introduces no new semantics:
# lib/sp/runtime/sensor_bridge.ex (integration layer; needs :jido)
defmodule SP.Runtime.SensorBridge do
use Jido.Sensor, name: "sp_sensor"
# External/internal event -> SP.Body.Sensor -> SP.Core.Signal -> Jido.Signal
def deliver_signal(%{body: body, world: world, tick: tick}) do
body
|> SP.Body.Sensor.transduce(world, tick)
|> Enum.map(&to_jido_signal/1) # SP.Core.Signal has identical CloudEvents shape
end
end
# lib/sp/runtime/agent_bridge.ex
defmodule SP.Runtime.AgentBridge do
use Jido.Agent, name: "sp_agent"
# Jido cmd/2 delegates to the SAME pure SP.Agent.decide/3.
def cmd(agent, signal) do
obs = SP.Interface.encode_observation(agent.state.channel_map, [signal])
{directives, st} = agent.state.policy.decide(obs, agent.state.policy_state, ctx(agent))
{put_in(agent.state.policy_state, st), Enum.map(directives, &to_jido_directive/1)}
end
end
- Ephemeral probes →
Jido.Agent.Directive.SpawnAgentstarted under aDynamicSupervisor, mapped fromSP.Core.Directive.SpawnWorker; stopped viaStopChild. They report back only by emitting signals (invariant #6). - Durable collaborators →
Jido.Pod/ a supervised child for long-lived infrastructure controllers (e.g. a resonator-tuning worker), justified only when state must outlive a single decision tick. - Testing → Jido's
JidoTest.Case+JidoTest.Eventuallyfor async runtime assertions; the pure tests here (SP.Simintegration tests) already cover the decision/effect contract without sleeps.
This adapter is specified rather than compiled into the offline core so that the benchmark kernel never depends on hex at test time. See limitations.md for the explicit scope note.
What the boundary forbids
- The learner never receives a
SP.Core.Signalwith semantic fields — it receives theSP.Interface-encoded%{int => float}projection. decide/3cannot reachSP.World/SP.Body; it has no reference to them.- Directives cannot be used as a hidden state-mutation channel:
SP.Simvalidates each (Directive.validate/1) and applies only the documented effect.
sha256 daad4d921768a542 — of the original file, so what was ingested stays checkable.
Plain — written for this website, not the source document
This page maps an external runtime contract onto this codebase, one rule at a time. The external materials are treated as the authority on how agents and runtimes should be structured, and this page shows where each of their rules is enforced here.
The contract in question is short. Agents hold state and expose one decision function. Actions do work. Signals carry events in. Instructions describe effects for a runtime to carry out. And the decision logic is the purity boundary, which cannot reach the world.
Two tables do most of the work: one lists each rule with the place in this codebase that enforces it, the other translates each concept into its local counterpart.
The honest note is that the live adapter is specified rather than compiled in, deliberately, so the benchmark core needs no external dependencies at test time. A closing section states what the boundary forbids, including that the decision function has no reference to the world at all.
Plain · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is daad4d921768a542
Clear — written for this website, not the source document
This document is a mapping rather than an argument. It takes an external runtime and agent-architecture contract, treats those materials as the authority, and shows where each of its rules is enforced in this codebase.
The contract is quoted in five short lines. Agents hold state and implement a single command function. Actions do work and transform that state. Signals route events into the system. Instructions describe effects for the runtime to carry out, and the purity boundary sits at the agent's decision logic.
A table then lists each rule with the place it is enforced. Signals are the only thing agents consume, in a shape borrowed from a public event standard. Sensors act as pure transducers from event to signal to consumer. The decision function returns instructions and state and performs no effects. Instructions are inert structures that only one component interprets. Body updates never touch the world. Spawned probes communicate by emitting signals rather than writing shared state. Short-lived children are distinguished from long-lived ones. And testing is layered with logical time only, so no sleeping appears in the suite.
A second table translates each concept into its local counterpart, naming the signal structure, the sensing component, the agent behaviour and its decision function.
A code block sketches how a live adapter would delegate to the same pure decision function, encoding an incoming signal into the opaque observation, calling the same policy, and translating the returned instructions. Around it, short notes describe how short-lived probes would be started under a supervisor and stopped again, reporting back only by emitting signals. They describe when a long-lived collaborator is justified, which is only when state must outlive one decision, and how testing would be handled.
The honest note follows, and it is the sentence to carry away. This adapter is specified rather than compiled into the offline core, so the benchmark kernel never depends on fetched packages at test time. A separate limitations document is named for the scope note.
The closing section states what the boundary forbids. The learner never receives a signal with meaningful fields; it receives the encoded projection into numbered channels. The decision function cannot reach the world or the body, because it holds no reference to them. And instructions cannot be used as a hidden channel for changing state, because each one is checked and only the documented effect is applied.
Clear · written 2026-08-01 by claude-opus-5 · not yet checked by a person · about the document whose sha256 is daad4d921768a542