AGENTWORKSHOP · INDUSTRIAL AGENT RUNTIME
A configuration-driven industrial agent runtime: agent teams read real telemetry and write setpoints through human approval — every event streaming live into a 3D twin. Protocol-real, and assertion-reproducible.
* Full closed-loop E2E on a real protocol stack (124 PASS / 0 FAIL, 2026-09-12, v0.7.36). The rest are countable facts: 6 driver classes (5 built-in + the serial-bridge plugin) / 4 entry points (WS · MCP · A2A · REST) / 14 harnesses (agents/registry.ts) / 99 settings in 16 groups (aw config list) / 7 task states.
Every screen below was recorded from a running instance, not a render. The three share one event bus — a sample written by a DAQ channel is at once the twin's input, a point on the trend curve, and the row an agent reads.
Watch one video, see the whole system. Dashboard → live DAQ (six protocols) → governed write & read-back (real Modbus PLC) → serial protocol plugin (real COM-port probe) → agent team execution → closed-loop trend (PV tracks the setpoint) → 3D digital-twin orbit. English captions, no cuts, nothing faked.

The twin is a render of the same event bus. Equipment ledger, DAQ channels, live trends, alarm strip and device health on one screen; the real render readout sits top-right (129 FPS) and the quality ladder (DPR / shadows / bloom) tracks a wall-clock frame budget, so mid-range machines stay honest too.

The acquisition chain, end to end. Under the gauge strip (nodes / published / consumed / lost / stored) sits the per-node ledger: live value, sampling period, WS fan-out state, driver type — and for control nodes the SET / ACT pair read back through the very calibration path used to write.

Starting a line = gating acquisition with its recipe window. From then on every sample carries product / recipe / batch; control nodes only declare classification parameters and process ranges — the actual write still passes interlock and approval.
One manager behind every door: four entry points converge into one runtime; the industrial stack and the agent runtime share the same event bus. Every cell below is a real module you can open in the repository.
Sampling: driver → queue → consumer three-way fan-out (WS push · TSDB write · twin writeback) | Write: interlock → approval → PLC write → readback | Storage: SQLite (channels · agents · tasks · messages · events)
The UI renders facts; it is not their source. Nodes, tasks and grants live server-side — as many DAQ points as the server holds, that is exactly what the screen shows.
Line permissions (none / read-only / operate) are enforced in the data plane: unauthorized line data never leaves the server, rather than being hidden by the frontend.
Drop counters, loss metrics and pipeline watermarks are exposed as they are; the ops log attributes every action to "Channel/Member". Even window.__townStats refuses to lie about rendering.
config.yml < runtime-settings < env — one descriptor registry drives both the CLI and the Settings UI. 99 settings across 16 groups (32 live / 67 restart), zero hardcoded defaults.
E2E suites run on a real Modbus/OPC UA/MQTT/HTTP stack: real PLC writes, real readbacks, real approvals — not mock self-certification. 124 acceptance assertions pass at current head (156 was the v0.7.20 baseline).
Agents propose, humans approve, the system executes, everything is audited. Manual-mode writes pend for review; approving performs a real, readback-verified PLC write.
Modbus TCP/RTU · OPC UA · MQTT · HTTP in both directions + the built-in serial plugin (direct RS-232/485) — connection pools, classified errors, per-driver connection tests. Protocols are plugins: newly injected protocols appear in the frontend with zero form changes.
Every control node reads its PLC value back through the same calibration path it writes with — SET vs ACT side by side, passive and never interlocked.
Safe-range ∩ recipe-window interlock → approval → PLC write → readback → signed history; every decision audited.
Parameter changes versioned with attribution (source + operator + reason); roll back to any revision or last-good batch, non-destructively.
Fourteen engines behind one contract, in three transport classes (in-process / persistent session / headless CLI); each channel picks harness → provider → model, with availability probing and dispatch-time checks.
Each channel keeps its own plugin switch set — a disabled plugin's tools never enter that team; plugins themselves are hot-managed.
Three-state grants enforced in the data plane; agent bindings validate line grants too.
User / agent / system actions attributed to "Channel/Member", queryable by line, recipe, source and kind — streamed live.
Private + shared domains, FTS5 with CJK segmentation, optional vector hybrid recall; team chronicle and idle reflections accrue.
Multi-line equipment, DAQ channels, alarms and trends on one 3D overview — second-level soft real-time, reachable from any browser.
The controlled loop: analyze trends → propose a setpoint → human approval → write & readback → numeric verdict. Auditable and reversible at every step.
Six-protocol acquisition/write-control (serial as a plugin) and multi-engine orchestration out of the box — an experiment bed with protocol-real verification.
Typed REST SDK plus plugins that register drivers, processors and agent tools; four entry points open the platform to external systems.
AgentWorkShop is a supervisory (SCADA-adjacent) layer running at second-level soft real-time. It is not a hard real-time controller: any <10 ms critical loop (interlocks, safety, servo) must live inside the PLC — setpoints written here are advisory and plant-side logic may veto.
# install globally, run from any directory (the published tarball ships a prebuilt .output/)
npm i -g agentworkshop
aw start # → http://localhost:3001 · config root ~/.AgentWorkShopGo deeper: your first agent × line session (the whole chain in ~2 minutes) · SDK guide · plugin guide · aw CLI manual
14 engines, 6 field protocols, 99 runtime settings and 124 re-runnable acceptance assertions are already in the repository. Supervisory by design, second-level soft real-time; protocol-real, assertion-reproducible.