Current State
April 29, 2026 ยท View on GitHub
Switchyard has moved past repository setup. The current workspace already proves the main platform seams and ships a coherent internal operator stack.
Workspace Snapshot
- 20 Mix projects in one non-umbrella workspace
- 13 reusable
core/*packages - 3 site packages:
sites/site_execution_plane,sites/site_jido, andsites/site_local - 3 runnable apps: TUI, CLI, and daemon
- root workspace orchestration with Blitz and internal artifact shaping through Weld
Delivered Platform Layers
Contracts And Catalog
core/workbench_contractsdefines typed site, app, resource, action, job, and log vocabulary.core/workbench_platformturns configured site providers into a platform catalog.
Local Control Plane
core/workbench_daemonowns the daemon seam and local authority boundary.core/workbench_transport_localgives the CLI, tests, and in-process clients a UI-agnostic transport path.core/workbench_process_runtime,core/workbench_job_runtime,core/workbench_log_runtime, andcore/workbench_store_localhold the runtime and persistence primitives under that daemon boundary.core/workbench_store_localnow supports manifests, versioned snapshots, JSONL journals, explicit malformed snapshot errors, and schema migration.core/workbench_process_runtimenow acts as the unified execution plane with explicit execution surfaces for local subprocesses and SSH exec plus honest sandbox policy handling.
Shell And TUI Infrastructure
core/workbench_shell_corekeeps shell state pure and presentation-agnostic.core/workbench_node_irprovides the backend-neutral node and layout vocabulary.core/workbench_widgetsprovides reusable widget constructors on top of that node layer.core/workbench_tui_frameworkprovides the component contract, runtime, effect/subscription handling, focus and region indexing, and renderer bridge toex_ratatui.core/workbench_devtoolsholds optional inspection-oriented tooling for the runtime.
Built-In Product Surfaces
sites/site_execution_planemaps live runtime substrate state into process, operator-terminal, job, stream, and site-state resources.sites/site_jidomaps durable Jido runs, boundary sessions, and attach grants into the same contract surface, including explicit site-state resources.sites/site_localremains in the repo as a focused local reference site.apps/terminal_workbenchdstarts the daemon with the first-party site set.apps/terminal_workbench_cliexposes headless JSON inspection commands.apps/terminal_workbench_tuihosts the product shell on top of the reusable Workbench runtime.
Current Operator Experience
The built-in Switchyard shell already supports:
- a home screen listing available sites
- per-site app selection
- generic list/detail screens for resource-backed apps
- daemon-backed snapshot refresh from the product shell
- a minimal process-start action on the Execution Plane processes app
- resource-scoped action listing, form defaults, confirmation, and result status in generic TUI detail views
- recent process log preview through the daemon log request path
- degraded recovery warnings after snapshot refresh
- custom framework-native app components through
AppDescriptor.tui_component
The TUI can now be run in three operator-access modes:
- local terminal mode
- SSH-served mode through
ex_ratatui - distributed mode through
ex_ratatui
The active first-party site catalog now splits live and durable truth explicitly:
site_execution_planeexposes processes, operator terminals, jobs, streams, search, and explicit site-state resourcessite_jidoexposes runs, boundary sessions, and attach grants
Process details still surface command preview, execution surface, target, and sandbox mode through the daemon snapshot seam. They now also carry typed lifecycle status, status reason, exit status, lifecycle timestamps, related job IDs, and related stream IDs.
The CLI currently supports:
switchyard_cli sitesswitchyard_cli apps <site-id>switchyard_cli actions [site-id]switchyard_cli actions --site <site-id>switchyard_cli action run <action-id> [--site <site-id>] [--resource kind:id] [--input-json JSON] [--confirm]switchyard_cli snapshotswitchyard_cli recoveryswitchyard_cli process start ...switchyard_cli process listswitchyard_cli process inspect <process-id>switchyard_cli process stop <process-id> --confirmswitchyard_cli streamsswitchyard_cli logs <stream-id> --tail <n>switchyard_cli process logs <process-id> --after-seq <n>switchyard_cli process restart <process-id> --confirmwith explicit unsupported/retry guidance until restart support is backed by safe restart specsswitchyard_cli process signal <process-id> <signal>with explicit unsupported guidance until transport support exists
Packaging Posture
Switchyard is currently delivered as an internal workspace and internal Weld projection, not as a Hex-first published product suite.
That posture is explicit:
- the Workbench runtime depends on
ex_ratatuifrom Hex - the current workspace tracks
ex_ratatui0.8.1 - Weld projects the internal
switchyard_foundationartifact mix release.preparebuilds the prepared bundle,mix release.trackupdatesprojection/switchyard_foundation, andmix release.archivepreserves the validated bundlerelease.publishremains out of scope
What The Next Phase Should Mean
Future work should extend breadth and depth without re-litigating the existing architecture:
- add richer command palette/text editing ergonomics over the existing generic TUI action flow
- add durable stream follow cursors and transport-proven reconnect only when lower surfaces can prove those semantics
- harden the current operator flows and release packaging posture
- keep the daemon, shell, framework, and site boundaries explicit
- keep adding execution surfaces and sandbox capabilities through the unified execution-plane seam instead of bypassing the daemon