ESS specification
Loom is specified in ESS. This page and the domain pages below are generated by loom-docs from two systems in the repository: loom in ess/ and intake in ess/intake/. The graphs come from ess specify compile, the pages from ess generate --kind docs. They change when the specification changes, and task check fails if they fall behind it.
Commission's system, in ess/commission/, has its own reference: the domain model and its value types.
Agent
An agent as data: one loom.agent/1 document naming the agent and its brief, its models, the harness session it may run (kind, run budget, stop policy, confinement and tool policy), its outer and inner loop, the states an item is projected by, the bindings it reads and writes through, its channel, write policy, capabilities, exposure, runtime and deployment.
ESS domain · loom.agent
An agent as data: one `loom.agent/1` document naming the agent and its brief, its models, the harness session it may run (kind, run budget, stop policy, confinement and tool policy), its outer and inner loop, the states an item is projected by, the bindings it reads and writes through, its channel, write policy, capabilities, exposure, runtime and deployment.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Authority
One authority decision taken by Mandate for Commission: the context the host supplies in the commission's authority context, and how each outcome of Mandate's check, and each failure to ask it, maps to Commission's answer. A failure grants nothing.
ESS domain · loom.authority
One authority decision taken by Mandate for Commission: the context the host supplies in the commission's authority context, and how each outcome of Mandate's check, and each failure to ask it, maps to Commission's answer. A failure grants nothing.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Authority domain in full
Data source
A data source read through the Connectors command line: the configured source (a Connectors adapter alias, a connection and the read operation it declares for each kind of read), how the command line is run, what operations describe reports for an operation and what one read answers; and a governed write: the operation written, the person's approval proof it passes and what Connectors answers for it. A read never carries a credential and never runs an operation Connectors describes as a mutation. A write carries no credential either; it runs only for a request the runtime admitted, with the path of the approval proof, and is never retried.
ESS domain · loom.datasource
A data source read through the Connectors command line: the configured source (a Connectors adapter alias, a connection and the read operation it declares for each kind of read), how the command line is run, what `operations describe` reports for an operation and what one read answers; and a governed write: the operation written, the person's approval proof it passes and what Connectors answers for it. A read never carries a credential and never runs an operation Connectors describes as a mutation. A write carries no credential either; it runs only for a request the runtime admitted, with the path of the approval proof, and is never retried.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Data source domain in full
Evaluation
One stateless evaluation: a protocol named from the host's catalog, a canon-case/1 case snapshot, the canon-evidence/1 records that go with it, the canon-decisions/1 explicit decisions taken for it and an optional trusted evaluation time go in; Canon's decision comes out, or a refusal naming the input it could not use. It decides and never acts, reads no clock and calls no network or model.
ESS domain · loom.evaluation
One stateless evaluation: a protocol named from the host's catalog, a canon-case/1 case snapshot, the canon-evidence/1 records that go with it, the canon-decisions/1 explicit decisions taken for it and an optional trusted evaluation time go in; Canon's decision comes out, or a refusal naming the input it could not use. It decides and never acts, reads no clock and calls no network or model.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Evaluation domain in full
Governor
The governor's held case as a store writes it: the case id, the protocol that governs it, the case revision, the current revision of every declared artifact, the value of every case input the protocol declares, the independence dimensions the host declared for each evidence producer, every evidence record received with whether it applies, and every explicit decision recorded for it; and the observations kept beside the cases.
ESS domain · loom.governor
The governor's held case as a store writes it: the case id, the protocol that governs it, the case revision, the current revision of every declared artifact, the value of every case input the protocol declares, the independence dimensions the host declared for each evidence producer, every evidence record received with whether it applies, and every explicit decision recorded for it; and the observations kept beside the cases.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Governor domain in full
Metering
One run's usage report: how many model calls it made, the input, output and cached input tokens the provider reported for them and their cost in millionths of a US dollar at the run's rate card, in total and for each executor call of the run. A cost no rate card priced is absent, never zero.
ESS domain · loom.metering
One run's usage report: how many model calls it made, the input, output and cached input tokens the provider reported for them and their cost in millionths of a US dollar at the run's rate card, in total and for each executor call of the run. A cost no rate card priced is absent, never zero.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Metering domain in full
Models
The models configuration of a host: the path of an llm.routes/1 document and, for each role Loom asks a model for (the agent and the classifier), the model that serves it, named by a route or by an endpoint and model id of that document.
ESS domain · loom.models
The models configuration of a host: the path of an `llm.routes/1` document and, for each role Loom asks a model for (the agent and the classifier), the model that serves it, named by a route or by an endpoint and model id of that document.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Models domain in full
Plugin
A plugin hosted by Loom: what its poll answers, how an item is classified and projected onto the actions and data sources a governed turn may use, what the turn ends with, the line the host records for each handled item and the state it keeps between polls. A turn proposes a reply or declines; it sends nothing.
ESS domain · loom.plugin
A plugin hosted by Loom: what its poll answers, how an item is classified and projected onto the actions and data sources a governed turn may use, what the turn ends with, the line the host records for each handled item and the state it keeps between polls. A turn proposes a reply or declines; it sends nothing.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Plugin domain in full
Resource
The LoomAgent custom resource (group loom.beyond10x.dev, version v1alpha1): its spec, the loom.agent/1 document and what the pod needs beside it, and its lifecycle as the controller reconciles it: applied into Pending, Running or Refused by the spec check, Degraded and back by the child Deployment's availability, Completed or Failed when the child Job's run ends, with the program's exit code and the time it ended, or, on a schedule, Running with each finished run's end recorded in turn, Pending again on a new generation, and gone on delete.
ESS domain · loom.resource
The `LoomAgent` custom resource (group `loom.beyond10x.dev`, version `v1alpha1`): its spec, the `loom.agent/1` document and what the pod needs beside it, and its lifecycle as the controller reconciles it: applied into Pending, Running or Refused by the spec check, Degraded and back by the child Deployment's availability, Completed or Failed when the child Job's run ends, with the program's exit code and the time it ended, or, on a schedule, Running with each finished run's end recorded in turn, Pending again on a new generation, and gone on delete.
- Entities1
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Lifecycles with transitions
LoomAgentDomain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|---|---|---|
LoomAgent | name: ResourceName (identity) observed_generation: integer check: Optional<CheckResult> deployment: Optional<DeploymentStatus> variant: Optional<AgentVariant> run: Optional<RunEnd> last_run: Optional<LastRun> conditions: Optional<List<Condition>> | states Completed, Degraded, Failed, Pending, Refused, Running; initial Pending run: Pending → Running refuse: Pending → Refused degrade: Running → Degraded recover: Degraded → Running observe-running: Running → Running observe-degraded: Degraded → Degraded complete: Running → Completed fail: Running → Failed respecify: Completed or Degraded or Failed or Pending or Refused or Running → Pending | — |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Resource domain in full
Run
The executor's record of a commission's run. Each catalogue is projected from one frontier; a selection names one action from that catalogue; arguments are generated for the selected action only. Loom never decides authority or completion.
ESS domain · loom.run
The executor's record of a commission's run. Each catalogue is projected from one frontier; a selection names one action from that catalogue; arguments are generated for the selected action only. Loom never decides authority or completion.
- Entities4
- Owns
- References
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Lifecycles with transitions
SelectionDomain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|---|---|---|
ActionCatalogue | catalogue_id: CatalogueId (identity) turn_id: TurnId frontier: string case_revision: integer entries: List<CatalogueEntry> | states Projected; initial Projected | — |
ArgumentRequest | argument_request_id: ArgumentRequestId (identity) selection_id: SelectionId | states Requested; initial Requested | selection references one Selection |
Selection | selection_id: SelectionId (identity) catalogue_id: CatalogueId action: string confidence: Optional<decimal> strategy: SelectionStrategy case_revision: integer replaced_by: Optional<SelectionId> | states Admitted, Overruled, Refused, Selected; initial Selected admit: Selected → Admitted refuse: Selected → Refused overrule: Selected → Overruled | catalogue references one ActionCatalogue replacement references one Selection telemetry owns one SelectionRecord |
SelectionRecord | selection_record_id: SelectionRecordId (identity) selection_id: SelectionId strategy: SelectionStrategy candidate_count: integer chosen_action: string confidence: Optional<decimal> fell_back_to: Optional<SelectionStrategy> latency_ms: integer input_tokens: integer output_tokens: integer | states Recorded; initial Recorded | — |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Session
The agent session an AgentExecutor runs through metaharness (harness, Claude Code or Codex) in a scratch copy of the workspace, and the change it returns as a proposed action. Proposed and applied are states of Commission's ActionRequest, not of the session: a session is one record.
ESS domain · loom.session
The agent session an AgentExecutor runs through metaharness (harness, Claude Code or Codex) in a scratch copy of the workspace, and the change it returns as a proposed action. Proposed and applied are states of Commission's ActionRequest, not of the session: a session is one record.
- Entities1
- References
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|---|---|---|
AgentSession | session_id: SessionId (identity) kind: SessionKind commission_id: CommissionId frontier_id: FrontierId vendor_session_id: Optional<string> agent: Optional<AgentId> continues: Optional<SessionId> action: string files: List<ChangedFile> failure: Optional<SessionFailure> | states Ended; initial Ended | predecessor references one AgentSession |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Session domain in full
Slack
The slack-handler plugin's configuration: the host's plugin configuration, the Slack adapter, connection and read operations its poll invokes, the bot's user id, the age rule, the walk's seed and lookback, and the objectives each channel serves. Nothing here writes to Slack.
ESS domain · loom.slack
The slack-handler plugin's configuration: the host's plugin configuration, the Slack adapter, connection and read operations its poll invokes, the bot's user id, the age rule, the walk's seed and lookback, and the objectives each channel serves. Nothing here writes to Slack.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Workflow
A Loom-side definition of a workflow over one protocol: an ordered list of steps, each either deterministic (one action with literal arguments, proposed without a model) or a judgement (the actions a model may choose among, with instructions). A step may be conditional on a frontier claim, never on a model. A run's progress over a definition may be kept as a record a store writes after every performed step and a later process resumes from.
ESS domain · loom.workflow
A Loom-side definition of a workflow over one protocol: an ordered list of steps, each either deterministic (one action with literal arguments, proposed without a model) or a judgement (the actions a model may choose among, with instructions). A step may be conditional on a frontier claim, never on a model. A run's progress over a definition may be kept as a record a store writes after every performed step and a later process resumes from.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Workflow domain in full
Action bindings
The commands an operator binds to the actions of one installed protocol, so that b10x-loom run drives a protocol whose actions no built-in binding performs. The operator declares them in a run configuration file (run --action-bindings <FILE>): the protocol, by its registration name, and for each action one argv, run without a shell. A run of that protocol performs an admitted action by starting its command with the action's arguments as JSON on standard input; the command's exit status decides the outcome, 0 performed and any other refused, and its standard output, one JSON object, is the action's performed report. The command is the verifier of its own action: its report may state evidence of the kinds the action declares it may produce, and only those are submitted, about the intent. A binding confers no authority: an action that needs a capability still needs its grant, and the governor still decides admission. Commands start with a cleared environment that keeps only PATH, never Loom's own credentials, and are killed past the configuration's timeout. Substrate does not confine them, so a run given a run configuration is refused, before any model call, with the confinement refusal CommandUnconfined unless the operator opts in to running the commands unconfined: with the run's --unconfined-bindings flag, or with the file's own unconfined_bindings: true; the flag wins, and the run reports which one opted in. A routed protocol that declares an action the file binds no command to ends with no local executor, naming the action. Configuration is trusted host context, never model output, and a protocol document never names a command.
ESS domain · intake.bindings
The commands an operator binds to the actions of one installed protocol, so that `b10x-loom run` drives a protocol whose actions no built-in binding performs. The operator declares them in a run configuration file (`run --action-bindings <FILE>`): the protocol, by its registration name, and for each action one argv, run without a shell. A run of that protocol performs an admitted action by starting its command with the action's arguments as JSON on standard input; the command's exit status decides the outcome, 0 performed and any other refused, and its standard output, one JSON object, is the action's performed report. The command is the verifier of its own action: its report may state evidence of the kinds the action declares it may produce, and only those are submitted, about the intent. A binding confers no authority: an action that needs a capability still needs its grant, and the governor still decides admission. Commands start with a cleared environment that keeps only PATH, never Loom's own credentials, and are killed past the configuration's timeout. Substrate does not confine them, so a run given a run configuration is refused, before any model call, with the confinement refusal CommandUnconfined unless the operator opts in to running the commands unconfined: with the run's `--unconfined-bindings` flag, or with the file's own `unconfined_bindings: true`; the flag wins, and the run reports which one opted in. A routed protocol that declares an action the file binds no command to ends with no local executor, naming the action. Configuration is trusted host context, never model output, and a protocol document never names a command.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Action bindings domain in full
confinement
Requested and observed confinement of local test commands. No automatic fallback. A command bound to a protocol's action runs outside Substrate, so a run that would start one is refused CommandUnconfined unless the operator opts out of confinement for those commands explicitly.
ESS domain · intake.confinement
Requested and observed confinement of local test commands. No automatic fallback. A command bound to a protocol's action runs outside Substrate, so a run that would start one is refused CommandUnconfined unless the operator opts out of confinement for those commands explicitly.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the confinement domain in full
context
Run-local working context owned by the CLI briefing for a single intent. Legacy remains the default; Bounded is opt-in. Intent and instructions are preserved exactly. Working state is derived only from typed execution reports, never parsed from model or artifact text. A test result records its tested revision: passing on revision A never validates later revision B. Compact history events are archived from the first action, with bulk contents retained in the existing result store. The separate archive admits at most 4096 events and 16777216 UTF-8 bytes. Capacity refusal stops subsequent model requests and preserves already completed effects. Bounded context retires old events in batches when a serialized agent request exceeds 49152 bytes or a 64-entry tail would discard history, aiming for 32768 bytes. Every serialized bounded request, including schemas and escaped lookup responses, must fit 65536 bytes; mandatory content that cannot fit is an explicit refusal. A stable prompt prefix changes only at a checkpoint, with changing state and candidates afterward. Both selection and argument generation may list and read archived history using existing result-reference selection semantics, at most eight lookups per stage and always within the request ceiling. Retrieval omits whole records when necessary and never truncates structured data. No summarization model calls are made. Context reports contain measurements only, no source payloads; absent provider counters remain unknown. This contract adds no persisted entity, interactive correction, durable session memory, training export, or governed-loop compaction behavior. Each classification, selection or argument request permits at most three identical model attempts on the same binding, only when llm marks a failure retriable and no stream event has been offered to the caller. The waits before attempts two and three are one and two seconds; a provider retry delay may extend a wait up to thirty seconds. Cancellation interrupts waits. Refusal, authorization, invalid requests, capacity failures and failures after stream output are never retried. Every attempt is checked against the request ceiling and measured separately, including failed attempts and their available usage. Exhaustion preserves the final error class and observation, clears retry eligibility and reports the attempt count. No effect is performed until argument generation succeeds and Commission revalidates the proposed action.
ESS domain · intake.context
Run-local working context owned by the CLI briefing for a single intent. Legacy remains the default; Bounded is opt-in. Intent and instructions are preserved exactly. Working state is derived only from typed execution reports, never parsed from model or artifact text. A test result records its tested revision: passing on revision A never validates later revision B. Compact history events are archived from the first action, with bulk contents retained in the existing result store. The separate archive admits at most 4096 events and 16777216 UTF-8 bytes. Capacity refusal stops subsequent model requests and preserves already completed effects. Bounded context retires old events in batches when a serialized agent request exceeds 49152 bytes or a 64-entry tail would discard history, aiming for 32768 bytes. Every serialized bounded request, including schemas and escaped lookup responses, must fit 65536 bytes; mandatory content that cannot fit is an explicit refusal. A stable prompt prefix changes only at a checkpoint, with changing state and candidates afterward. Both selection and argument generation may list and read archived history using existing result-reference selection semantics, at most eight lookups per stage and always within the request ceiling. Retrieval omits whole records when necessary and never truncates structured data. No summarization model calls are made. Context reports contain measurements only, no source payloads; absent provider counters remain unknown. This contract adds no persisted entity, interactive correction, durable session memory, training export, or governed-loop compaction behavior. Each classification, selection or argument request permits at most three identical model attempts on the same binding, only when llm marks a failure retriable and no stream event has been offered to the caller. The waits before attempts two and three are one and two seconds; a provider retry delay may extend a wait up to thirty seconds. Cancellation interrupts waits. Refusal, authorization, invalid requests, capacity failures and failures after stream output are never retried. Every attempt is checked against the request ceiling and measured separately, including failed attempts and their available usage. Exhaustion preserves the final error class and observation, clears retry eligibility and reports the attempt count. No effect is performed until argument generation succeeds and Commission revalidates the proposed action.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the context domain in full
Run events
The machine-readable record of one b10x-loom run, written as one JSON object per line on standard output when the operator asks for it. Every line carries the stream's schema version. The records project what the run already does: the route it took, each model turn, each tool call a model made, the usage a provider reported, each agent session metaharness ran for it, named by its trace-ir/1 digest and summarized, the approvals the run stopped for, and exactly one terminal record, last, with the stop reason and the process exit status. A record adds no authority and is not evidence.
ESS domain · intake.events
The machine-readable record of one b10x-loom run, written as one JSON object per line on standard output when the operator asks for it. Every line carries the stream's schema version. The records project what the run already does: the route it took, each model turn, each tool call a model made, the usage a provider reported, each agent session metaharness ran for it, named by its trace-ir/1 digest and summarized, the approvals the run stopped for, and exactly one terminal record, last, with the stop reason and the process exit status. A record adds no authority and is not evidence.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the Run events domain in full
protocols
A trusted host composes engineering, Loom and explicitly installed custom Canon definitions into one immutable catalog per run. Registration names are name@major and their major matches the definition revision. Canon owns parsing, validation and evaluation. Routing, artifact initialization and governor admission use the same exact definitions. Duplicate identities refuse, including attempts to shadow a bundled definition. Definition availability does not grant authority or supply executable tools; host bindings and revision initializers decide execution support. Custom documents never execute code or prescribe host commands. Installation snapshots one local file or regular Git blob at a full pinned commit. Git uses HTTPS, SSH or file transports, never a checkout, filters, submodules or package hooks. Installation validates before atomically publishing in the user XDG data directory. Replacement is explicit; bundled entries cannot be replaced or removed. Source bytes and digest are retained together. Every run verifies installed content and loads offline; no automatic network fetch or workspace discovery occurs. Missing, corrupt or incompatible definitions fail before model calls. Source credentials are never stored in locators. Protocol documents are bounded to one MiB and model requests retain the bounded-context ceiling without silently omitting entries. Installed definitions are one atomic manifest bounded to 64 MiB. An existing installation directory without its manifest is corrupt, not an empty catalog. Writers serialize updates; readers observe a whole manifest. Symlinked installation roots or ancestors refuse.
ESS domain · intake.protocols
A trusted host composes engineering, Loom and explicitly installed custom Canon definitions into one immutable catalog per run. Registration names are name@major and their major matches the definition revision. Canon owns parsing, validation and evaluation. Routing, artifact initialization and governor admission use the same exact definitions. Duplicate identities refuse, including attempts to shadow a bundled definition. Definition availability does not grant authority or supply executable tools; host bindings and revision initializers decide execution support. Custom documents never execute code or prescribe host commands. Installation snapshots one local file or regular Git blob at a full pinned commit. Git uses HTTPS, SSH or file transports, never a checkout, filters, submodules or package hooks. Installation validates before atomically publishing in the user XDG data directory. Replacement is explicit; bundled entries cannot be replaced or removed. Source bytes and digest are retained together. Every run verifies installed content and loads offline; no automatic network fetch or workspace discovery occurs. Missing, corrupt or incompatible definitions fail before model calls. Source credentials are never stored in locators. Protocol documents are bounded to one MiB and model requests retain the bounded-context ceiling without silently omitting entries. Installed definitions are one atomic manifest bounded to 64 MiB. An existing installation directory without its manifest is corrupt, not an empty catalog. Writers serialize updates; readers observe a whole manifest. Symlinked installation roots or ancestors refuse.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the protocols domain in full
query
Loom owns the system-query@1 protocol and its system.time.read host binding. The action takes an empty object, samples one instant from the host clock and derives UTC and local time with its numeric offset. No shell or network is used. A typed observation is bound to the case and intent revision; only the trusted verifier submits system_time observed evidence on intent. Model text, earlier cases and fabricated observations do not establish completion. The answer is rendered directly from that observation, without another model call. Canon's answered outcome is successful completion, exit zero. Clock and conversion failures never submit success evidence. CLI routing precedes resource initialization. System queries need no workspace, Git, Substrate or test runner and ignore supplied workspace paths without accessing them. Software changes retain workspace, confinement and merge authority requirements. Installed custom clock protocols may reuse the same host binding when they declare only the intent artifact and the read-only system.time.read action with the system_time evidence contract. Other definitions remain available to embedders and run in this CLI only through commands the operator binds to their actions (intake.bindings); without one they have an explicit missing-executor result. Both context policies and measurements apply. Legacy remains default. Only local date/time queries are supported initially; an unrelated system question must not complete using a clock observation.
ESS domain · intake.query
Loom owns the system-query@1 protocol and its system.time.read host binding. The action takes an empty object, samples one instant from the host clock and derives UTC and local time with its numeric offset. No shell or network is used. A typed observation is bound to the case and intent revision; only the trusted verifier submits system_time observed evidence on intent. Model text, earlier cases and fabricated observations do not establish completion. The answer is rendered directly from that observation, without another model call. Canon's answered outcome is successful completion, exit zero. Clock and conversion failures never submit success evidence. CLI routing precedes resource initialization. System queries need no workspace, Git, Substrate or test runner and ignore supplied workspace paths without accessing them. Software changes retain workspace, confinement and merge authority requirements. Installed custom clock protocols may reuse the same host binding when they declare only the intent artifact and the read-only system.time.read action with the system_time evidence contract. Other definitions remain available to embedders and run in this CLI only through commands the operator binds to their actions (intake.bindings); without one they have an explicit missing-executor result. Both context policies and measurements apply. Legacy remains default. Only local date/time queries are supported initially; an unrelated system question must not complete using a clock observation.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
results
Immutable UTF-8 observations retained by one run's briefing. Model-facing references select data before an ordinary action proposal reaches Commission admission; they never grant an action, carry authority, execute expressions, or stand in for verified evidence.
ESS domain · intake.results
Immutable UTF-8 observations retained by one run's briefing. Model-facing references select data before an ordinary action proposal reaches Commission admission; they never grant an action, carry authority, execute expressions, or stand in for verified evidence.
- Entities0
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit
Read the results domain in full
Routing
An intent as given, the references extracted from its text, the protocol the router proposes for it, the slice run that works the intent until it is blocked, and the evidence that run submits from what it did itself. A pick is a proposal, never authority.
ESS domain · intake.routing
An intent as given, the references extracted from its text, the protocol the router proposes for it, the slice run that works the intent until it is blocked, and the evidence that run submits from what it did itself. A pick is a proposal, never authority.
- Entities8
- Owns
- References
- One
- Many
- Initial state
Hover or focus an entity to see its fields, lifecycle and relations. Press Enter to pin it, Escape to clear.
Domain as text
| Entity | Identity and fields | Lifecycle | Relations |
|---|---|---|---|
ExtractedReference | reference_id: uuid (identity) intent_id: IntentId kind: ReferenceKind value: string | states Extracted; initial Extracted | — |
Grant | commission_id: CommissionId (identity) action: string capability: string granted: boolean action_request_id: ActionRequestId granted_at: timestamp mandate_approval: Optional<MandateApprovalId> | states Granted; initial Granted | — |
Intent | intent_id: IntentId (identity) text: string | states Received; initial Received | references owns many ExtractedReference pick owns one ProtocolPick |
MergeHandoff | action_request_id: ActionRequestId (identity) commission_id: CommissionId workspace: string head: string | states Recorded; initial Recorded | — |
ProtocolPick | pick_id: uuid (identity) intent_id: IntentId protocol: string confidence: decimal reasons: List<string> | states Proposed; initial Proposed | — |
ResumeContext | commission_id: CommissionId (identity) case_id: CaseId agent_revision_id: AgentRevisionId intent: string route: AcceptedRoute workspace: Optional<string> test_command: List<string> test_paths: List<string> regression_test_command: Optional<string> max_steps: integer confinement: Backend cgroup_root: Optional<string> model: string catalog: Optional<string> config: Optional<string> | states Kept; initial Kept | — |
SliceEvidence | evidence_id: uuid (identity) kind: SliceEvidenceKind subject_revision: string result: Optional<SliceEvidenceResult> observation_id: uuid observed_at: timestamp producer: string | states Submitted; initial Submitted | — |
SliceRun | run_id: uuid (identity) intent_id: IntentId protocol: string steps: integer stop_reason: StopReason approvals: List<string> risk: Risk change_kind: ChangeKind affects_security_boundary: boolean test_paths: List<string> regression_test_command: Optional<string> | states Ended; initial Ended | intent references one Intent |
More columns: swipe horizontally, or focus the table and use the arrow keys.
Source: generated by loom-docs from ess/ (ess specify compile); do not edit