Runtime State Is Queryable Directly, Not Through a Synthesized API

The eOS runtime platform exposes its own state to queries directly. An agent, a human, or another LLM that wants to know what objects exist, what their state is, or what events have fired queries the runtime itself rather than a separately-maintained data-model API. The runtime's state graph is the introspection surface, not a source the introspection layer is synthesized from; agents do not read a cached or synthesized view of state, they read the live state.

Why It Is Held

Introspection-API patterns built on top of the runtime fragment. Each team builds a separate API surface (REST endpoints, GraphQL schema, custom protocol) that mirrors a chosen subset of runtime state, each implementation has bugs the team rebuilds, and each accumulates synchronization drift between the API's view and the runtime's actual state. The application code that maintains "when state changes, update the introspection-API view" is not the application's actual logic -- it is bookkeeping the platform could provide. Treating runtime self-description as a primitive removes the synchronization layer entirely: the runtime exposes itself, and agents reading the introspection surface read the same state graph that every other primitive operates on.

The platform-as-introspection-surface stance composes with the persistent-state primitive ([[Runtime State Is Persistent by Default, Not by Application Discipline]]). The state graph the introspection primitive reads is the same state graph the persistence primitive maintains across restart -- there is no separate "persisted state" and "introspectable state" pair to keep in sync. An agent querying the runtime for an object's state at restart time observes the post-restoration state, not a synthesized snapshot built from external sources. Without runtime-level persistence, introspection would have to coordinate with whatever mechanism rebuilt state at startup -- exactly the synchronization-drift pattern the primitive removes.

The platform-as-introspection-surface stance composes with the capability-separation primitive ([[Capability Boundaries Are Runtime-Enforced, Not Policy-Checked]]). What introspection can see is bounded by the querying principal's capability tier -- a highly-privileged query observes the full state graph; an unprivileged agent's query observes only what its capability allows. The capability layer that bounds mutation also bounds observation, and the same enforcement machinery applies. Without runtime-level capability separation, an introspection endpoint would have to apply its own access control on top of the query path -- a separate enforcement layer that the platform's primitive makes redundant.

The eOS-kernellib foundation provides building blocks at the runtime layer: a status query returns runtime metadata about objects, programs, callouts, and resource usage, and a call-trace query returns the current call stack at any point. The kernel layer uses these internally for resource accounting but does not yet expose a public introspection endpoint -- the gap is a JSON/HTTP introspection layer for agent state and object registry, built as a translation surface over the runtime's own status and object-graph queries.

The Conviction is held because the no-synchronization-drift agent-coding experience is what platform adoption purchases for the introspection scenario. When the runtime is the introspection surface, agents trust that what they read is what is, without having to reason about whether the API view has caught up with the runtime's actual state. Trading the primitive for a synthesized API would surrender exactly the property that lets agents (and humans, and other LLMs) reason about runtime state with confidence rather than with reconciliation logic.

What It Asks

Honoring this Conviction asks the project to keep introspection on the runtime itself, not on a synthesized mirror.

Drift Recognition

The Conviction has weakened when the project's outputs treat introspection as a separate API surface that has to be maintained, rather than as direct runtime querying.

Relations