Documentation

Use the app

How it works

Build on it

Get involved

Architecture

Microscopy Hackathon 3 is one desktop app with three layers: an assistant (the Harness), an instrument layer (Tango and the device service), and instruments (the Digital Twin or a real microscope). Everything talks through one interface on each boundary, so a microscope and the twin look the same from the assistant's side.

System overview

The whole system: app, assistant, instrument layer and instruments

Boundary Interface Why it is there
Assistant to instrument layer MCP over HTTP Tools appear as mcp__tem_twin__<tool>, the same contract as the cloud gateway
Gateway to device Tango Reuses the existing gateway: device list, one operation at a time, no automatic retry
Proxy to device service HTTP with a per-device token The Tango device holds no instrument code
Device service to instrument AutoScript The unmodified Thermo client; only the host and port differ

The rule that makes this simple: an instrument is an AutoScript host:port. The twin is 127.0.0.1:<port>. Nothing above the device service knows which one it is talking to, apart from the kind it reports (simulation or hardware).

What happens when you approve a microscope

Registration and approval both happen on this computer. No server is involved.

Registering and approving a microscope, step by step

Ticking a device under Instruments is a separate, per-conversation step. A tool call whose device argument is not ticked in that conversation is refused before it reaches Tango.

What happens on a tool call

One tool call from the agent to the instrument

A failed or timed-out call is never retried automatically, because a timeout does not prove the instrument stopped.

Knowledge

The assistant looks things up in a local Wiki. The Wiki is reference only and never runs instrument tools.

Processes

Started by the app. All listen on 127.0.0.1 only, and ports are chosen automatically.

Process Started Stops with Port
Electron app You open it Quit none
Harness client App launch, after setup App 7380
Tango database App launch App Saved in stack.json
MCP gateway App launch App Saved in stack.json
TEMHTTPProxyDevice server When a device is approved App Saved in stack.json
Twin 3 server First use of the twin Stop digital twin, or App Chosen per run
Device service, one per device Register or Connect Disconnect, or App Saved per device

Where data lives

Under Application Support/Microscopy Hackathon 3 on macOS (the Electron user data folder on other systems):

Path Contents Survives an update
runtime/<id>/ Installed client, twin, Python environment No, replaced
dsh/ Sessions, model settings, credentials, profile Yes
devices/<id>/ Device identity, token, service config Yes
devices/tango/ Tango database, stack.json, http-nodes.json, stack.log Yes
plugins/ Your plugin selection and patch Yes

User plugins are installed into runtime/<id>/client/node_modules, so they are reinstalled after an update. The app never reads or writes ~/.dsh, which belongs to a source checkout of EDMORE.

Trust boundaries

What this package leaves out

The desktop package is Harness and Wiki with the instrument layer. These parts of EDMORE stay in the source tree but are forced off in desktop/main.mjs and cannot be turned on from settings:

Left out Effect
Plan Judge, also called the Workflow Engine No plans, approvals of plans, or workflow UI
Jev decisions No calls to the external Jev service
Computer use (cua-driver) The assistant cannot see or drive your desktop
OpenAI provider Hidden from the model list