Nexus, Sigils, and Weaves
Integrator overview of how Nexus hosts runtime surfaces, Sigils expose variables, and Weaves execute control or simulation loops.
This page is the integrator map for Aether. It explains startup order and how runtime surfaces line up, then points to dedicated references for each concept.
Warning
Registration depends on import-time setup. Follow these rules or routes, MCP tools, and OPC UA nodes can be missing or duplicated.
- Nexus first - Construct
Nexusbefore anySigilorWeave.- Sigils before Weaves - Declare every
Sigilat module scope, beforenexus.start().- Weaves at module scope - Declare every
Weaveat module scope so startup sees and schedules them.
Concept pages
Mental model
| Piece | Role |
|---|---|
| Nexus | One process-wide singleton runtime (embedded OPC UA, HTTP, MCP, lifecycle, tracing, cert handling). |
| Sigil | One OPC UA variable abstraction with generated REST and MCP read/write surfaces. |
| Weave | A periodic callback loop used for physics, synchronization, or control logic. |
Startup sequence
- Construct
Nexuswithopc_ua_urland your license token (token=orVEILNET_AETHER_TOKEN). - Instantiate all Sigils (embedded and/or external OPC UA-backed).
- Instantiate all Weaves with their cycle times and callbacks.
- Call
nexus.start()to launch HTTP (/health,/docs,/nexus/mcp) and OPC UA.
Minimal shape
from aether.nexus import Nexus
from aether.sigil import Sigil
from aether.weave import Weave
nexus = Nexus(opc_ua_url="opc.tcp://localhost:4840")
setpoint = Sigil(
node_id="ns=2;s=Twin.Setpoint",
initial_value=50.0,
)
temperature = Sigil(
node_id="ns=2;s=Twin.Temperature",
initial_value=20.0,
writable=False,
)
async def step():
sp = float(await setpoint.read())
t = float(await temperature.read())
t += (sp - t) * 0.02
await temperature.write(t)
Weave(
label="physics",
cycle_time=0.1,
callback=step,
)
if __name__ == "__main__":
nexus.start()