Product
Kernel
| Subsystem | Responsibility | In | Out |
|---|---|---|---|
| Observation | Collects the declared fields from every attached adapter and freezes them for the tick, so a plan is never built against state that moved underneath it. | Adapter observe() results | Immutable observation frame |
| Manifest resolution | Resolves the role for an actor into a concrete capability set, constraint set and resource budget by composing the domain packs in scope. | Role id, domain packs | Resolved authority envelope |
| Planner | Turns a normalised goal into an ordered sequence of declared actions. Deterministic and seeded; it cannot invent an action that is not in the surface. | Goal, observation frame, action surface | Candidate plan |
| Authority validator | Checks each candidate action against capability, constraint, ownership and world preconditions, and returns a typed verdict with the evidence it decided from. | Candidate plan, authority envelope | Verdict per action |
| Resource ledger | Reserves and settles declared resources inside one transaction. A plan that cannot pay for itself is discarded before anything actuates. | Validated plan, declared costs | Atomic resource transaction |
| Executor | Drives the adapter’s apply() for approved actions and tracks completion, interruption and timeout against the actor’s embodiment. | Approved action | Actuation result |
| Commit | Writes the resulting world state on the server and publishes the replicated view. This is the only writer in the system. | Actuation result | Authoritative world state |
| Diagnostics | Records goal, plan, verdicts, spend and outcome per tick under the same redaction rules as observation, so inspecting an agent cannot widen what leaves the server. | Every stage above | Redacted trace |
Execution path
Any Instance you already own — a character rig, a vehicle chassis, a boat hull, a conveyor line, a flock controller.
Binds that model’s parts, attributes, seats and motors to a normalised observation and actuation surface. Embodiment lives here, not in the kernel.
Declares what this actor may perceive, may attempt, and may spend. Anything absent from the manifest is not reachable at runtime.
A normalised goal resolves into an ordered plan built only from declared actions, against the actor’s current observation.
Every proposed action is checked against capability, constraint, ownership and world preconditions. Rejection is a normal outcome, not an error path.
Currency, stock, fuel, cargo and charges move atomically. A partially applied plan is never observable.
The approved action runs through the adapter’s actuation surface — the same interface for a humanoid step, a throttle input and a crane slew.
World state is written on the server. Clients receive the result. No client message can substitute for this step.
Adapter contract
Returns the declared observation fields for one instance. This is an allowlist: what you do not return does not exist as far as the planner, the diagnostics and any external provider are concerned.
Each action names its parameters, its preconditions and its cost against declared resources. The planner composes plans only from this set.
Runs after validation and resource settlement have already succeeded. An adapter never decides whether something is allowed — by the time it is called, that question has been answered.
return Runtime.defineAdapter({
id = "machine/gantry",
-- Normalise the model into the observation the kernel reasons over.
observe = function(model)
return {
boom_angle = model.Boom:GetAttribute("Angle"),
hoist_height = model.Hoist.Position.Y,
payload = model:GetAttribute("PayloadId"),
envelope = { radius = 42, height = 28 },
faults = model:GetAttribute("Faults") or {},
}
end,
-- Everything this embodiment can be asked to attempt.
actions = {
slew = { params = { angle = "number" }, cost = { power = 2 } },
hoist = { params = { height = "number" }, cost = { power = 3 } },
grip = { params = { target = "Instance" } },
release = {},
},
-- Actuation only. Validation and resource settlement already happened.
apply = function(model, action, params)
if action == "slew" then
model.Boom:SetAttribute("TargetAngle", params.angle)
end
end,
})Guards · Villagers · Companions · Crowd extras
Shopkeepers · Quest givers · Repair stations · Brokers
Cars · Trucks · Trams · Service vehicles
Fixed wing · Rotorcraft · Drones · Airport ground traffic
Ferries · Cargo vessels · Patrol craft · Dock tenders
Herds · Predators · Mounts · Ambient fauna
Flocks · Drone groups · Convoys · Crowd units
Cranes · Robotic arms · Conveyors · Turrets · Drills
Signals · Doors and gates · Power grids · Logistics networks
Anything with observable state and a way to act on it
One adapter serves every instance of its class. A port with forty cranes needs one gantry adapter, not forty.
Authority
-- Every proposed action passes the same gate before anything moves.
local verdict = Runtime.validate(actor, {
action = "hoist",
params = { height = 26 },
})
-- verdict.allowed -> boolean
-- verdict.reason -> "constraint.max_payload_tonnes" | "capability.missing" | ...
-- verdict.evidence -> the observation fields the decision was made from
if not verdict.allowed then
-- Rejection is an ordinary outcome. The actor re-plans; it does not retry blindly.
Runtime.replan(actor, { excluding = verdict.reason })
end| Capability | Client | Server runtime | External model |
|---|---|---|---|
| Read world state | Replicated view only | Full authoritative state | Redacted observation, if enabled |
| Submit a goal | As a request, subject to validation | Directly | As a proposal |
| Select the next action | Never | Planner output | May rank or suggest |
| Skip authority validation | Never | Validation is not optional | Never |
| Move resources | Never | Atomic transaction | Never |
| Commit world state | Never | Sole writer | Never |
External intelligence
Only the observation fields you enumerate. Not the full frame, not the world, not player identity. The payload is built from the allowlist, so widening it is an explicit edit rather than an accident.
A proposal — a goal, a ranking over candidate goals, or a suggested plan. It re-enters at validation and is checked exactly like a locally generated plan.
-- External evaluation is opt-in, redacted, and advisory.
Runtime.configureEvaluation({
enabled = true,
provider = "your-provider",
-- Only these observation fields ever leave the server.
expose = { "inbound_queue.depth", "weather.state", "berth.availability" },
-- The provider returns a proposal. It is validated like any other input.
accepts = { "goal_ranking" },
-- If it is slow or unavailable, the deterministic planner continues alone.
on_timeout = "fall_back_to_local",
timeout_ms = 400,
})Boundaries