using a TUI is like moving to Miami to find a tech job-A user on X.com
Switchyard is a terminal-native operator workbench workspace for local operations and multi-site terminal applications. The repository already contains the platform contracts, daemon/runtime layers, reusable Workbench TUI stack, first-party Execution Plane and Jido site surfaces, and runnable daemon, CLI, and TUI entrypoints.
- non-umbrella Elixir workspace with 20 Mix projects:
root workspace, 13
core/*packages, 3 site packages, and 3 runnable apps - typed contracts, site catalog derivation, daemon transport, and runtime packages for processes, jobs, logs, and snapshot storage
- a unified execution plane in
core/workbench_process_runtimethat brokers managed processes onto the realexecution_planetransport surface with explicit placement and sandbox metadata - first-party operator sites for raw Execution Plane state and durable Jido
state, plus a retained
site_localreference package for focused local flows - backend-neutral Workbench node IR, reusable widgets, and a BEAM-native TUI
runtime bridged onto
ex_ratatui - Switchyard product TUI that already supports site navigation, app routing, generic list/detail flows, live daemon-backed refresh/actions, and custom framework-native app components
- headless CLI and daemon entrypoints that prove meaningful behavior exists beneath the UI, including generic action execution, structured process lifecycle requests, logs, streams, and recovery inspection
- Weld projection metadata and tracked projection flow for the internal
switchyard_foundationartifact - governed route authority contracts that split standalone env/config compatibility from authority-materialized process env, target routing, daemon site routing, and operator transport
Switchyard is no longer just a scaffold. The baseline architecture is in place, the package boundaries are explicit, and the current work is about extending and hardening those seams rather than inventing them.
apps/terminal_workbenchdstarts the local daemon with the first-party site catalog.apps/terminal_workbench_cliexposes a JSON-oriented control surface:sites,apps <site-id>,actions,action run,snapshot,recovery, process lifecycle commands, streams, and logs.apps/terminal_workbench_tuiboots the Switchyard shell on top of the reusable Workbench runtime and serves operators locally or through theexecution_plane_operator_terminalingress package.sites/site_execution_planemaps live runtime substrate state into generic processes, operator-terminal, and job views.sites/site_jidomaps durable Jido runs, boundary sessions, and attach grants into the same product shell.
core/*reusable platform packages such as contracts, platform catalog, daemon, runtime layers, shell state, node IR, TUI framework, widgets, and devtoolssites/*built-in site adapters; the active first-party operator catalog issite_execution_planeplussite_jido, withsite_localretained as a focused local reference siteapps/*runnable entrypoints for the TUI shell, headless CLI, and daemonguides/*anddocs/*workspace architecture, workflow, and delivery references used for HexDocs and handoff
From the repo root:
mix deps.get
mix mr.deps.get
mix ciRun the daemon:
cd apps/terminal_workbenchd
iex -S mixInspect the platform headlessly:
cd apps/terminal_workbench_cli
mix escript.build
./switchyard_cli sites
./switchyard_cli apps execution_plane
./switchyard_cli actions --site execution_plane
./switchyard_cli snapshot
./switchyard_cli recovery
./switchyard_cli process start --id echo --command "printf 'hello\n'"
./switchyard_cli process stop echo --confirm
./switchyard_cli action run jido.review.refresh --site jido --input-json '{"force":true}'Run the TUI:
cd apps/terminal_workbench_tui
mix escript.build
./switchyard --debugServe the same TUI over SSH for remote operators:
./switchyard --ssh --ssh-user demo --ssh-password demoRun the TUI over the distributed ex_ratatui transport in a trusted BEAM
environment:
./switchyard --distributedex_ratatui transport is only the operator-access layer for the UI. Managed
process execution still goes through Switchyard's execution plane using
execution surfaces such as :local_subprocess and :ssh_exec, while remote
operator serving flows through execution_plane_operator_terminal.
Standalone CLI, TUI, daemon, and process-runtime calls may still pass explicit
env, target, and operator transport settings at boot/config boundaries. When a
Switchyard.Contracts.GovernedRouteAuthority is present, Switchyard rejects
direct env, target-routing, credential, singleton-client, daemon-site, and
operator-transport fields and materializes those values from the authority
packet. Daemon snapshots keep env summaries only, command previews and process
logs redact materialized env values, and persisted receipts never store the
secret values themselves.
The repo root is authoritative for workspace-wide quality gates:
mix mr.deps.getmix mr.format --check-formattedmix mr.compilemix mr.testmix mr.credo --strictmix mr.dialyzermix mr.docs --warnings-as-errorsmix weld.verifymix release.preparemix release.trackmix release.archivemix ci
switchyard_foundation is still an internal welded artifact, not a published
Hex package. The release lifecycle is therefore bundle- and projection-oriented:
mix release.preparemix release.trackmix release.archive
mix release.prepare builds the prepared artifact bundle under dist/.
mix release.track updates the orphan-backed
projection/switchyard_foundation branch from that bundle so downstream repos
can pin a real generated-source ref before any formal release boundary exists.
mix release.archive snapshots the prepared bundle after validation.
The committed workspace dependency stays on the released Hex Weld line. If a coordinated prerelease Weld validation run is needed, do it with an ordinary prerelease version bump rather than with repo-local path or git override logic.
Start here if you are orienting yourself in the codebase:
- Guide Index
- Current State
- Vision
- Monorepo Strategy
- Package Boundaries
- Runtime Model
- Workspace Workflow
- Testing And Delivery
- Implementation Checklist
Switchyard is released under the MIT License.