Read flows and project packs, send commands through the Temporal client, read events and workspaces.
call
L4 flow enginereplaceable
engines/temporal/
The only place that imports temporalio. FlowWorkflow calls RunState.plan() over and over; activities only forward. ScheduledLaunch starts scheduled runs.
call
L3 core libraryengine-independent
runner/→storage/→core/
core: schema, scheduling, expressions, prompts, manifests, events; by convention no IO
storage: the volume's directories and files, the event log
Domain modules beside them (project, knowledge, evals, takeaways, trail, runs, localrepo, flowfile) depend only on core and are outside the layer contract
openshell CLI · docker CLI
L2 OpenShellisolation and credentials
gatewaysupervisor
gateway: credentials, policies, sandbox lifecycle
supervisor: trusted container outside the sandbox; enforces policy, injects credentials
L1 Dockercompute and storage
two containers per sandboxhelper containersvolume myorch-artifacts
Sandbox containers, helper containers that read and write the volume, the workspaces of all runs.
uv run lint-imports checks two rules: engines → runner → storage → core may only depend downward; core, storage and runner may not import temporalio.