Expand description
§scema-agent — the loop
observe ─▶ hypothesise ─▶ simulate ─▶ score ─▶ decide ─▶ record ─▶ remember
▲ │
└──────────────────────────────────────────────────────────────────┘Every stage is a trait with at least one real implementation, and the whole pass is
deterministic: the same world and goal produce the same DecisionRecord id. That is
not an aesthetic property — it is what makes the record verifiable by somebody who was
not there.
§One loop, four kinds of world
Agent::observe resolves a locator against an ordered registry. RepoObserver walks a
source tree in this process; ImportObserver reads a WorldState that something else
produced — the browser extension, scematica_mesh::omni, alchem_link.omni. Nothing
above perception can tell which it was, which is what “domain-agnostic” has to mean in
order to be worth claiming. The one thing that is distinguishable is attribution: an
imported world’s observer field is stamped imported:, so a record can never claim a
world that arrived as a file was observed here.
§What the loop does not do
It does not execute. Cycle ends at a decision and a record; nothing in this
workspace writes to the environment it observed. The scema_world::Action values in a
chosen hypothesis are a declaration of intent that has been risk-classified and
constraint-checked, and turning one into a side effect is a separate crate with a
separate approval model — the one alchem-link already worked out, where risk class is
declared per tool and no terminal means deny.
Saying that plainly matters more than shipping it. An agent runtime that quietly gained a write path would invalidate every claim the rest of these crates make about being safe to point at a live system.
§Memory is written on every pass, including the abstentions
The rejected branches are the interesting ones. Each becomes a
scema_memory::MemoryBody::Counterfactual holding what was projected for it and why
it lost — and, per that crate’s rule, it stays unresolved forever unless somebody
actually runs it. An abstention is recorded as an episode with
scema_memory::Outcome::Unobserved, because “the agent declined” is a fact about the
agent and not an outcome in the world.
Modules§
- hypothesize
Hypothesizer: where competing futures come from.
Structs§
Constants§
- RUNTIME
- Runtime identifier stamped into every record.