Skill Tracer
Skills › Scientific Agent Skills › pylabrobot › hardware-backends.md

hardware-backends.md

196 lines · skills/pylabrobot/references/hardware-backends.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# Hardware backends and supported robots
2
3Verified against **PyLabRobot 0.2.2** on **2026-10-01**. Released exports were inspected without constructing hardware backends. Hosted
4`/stable/` support tables now describe development APIs; see [review](review.md).
5

Hardware backends and supported robots

Verified against PyLabRobot 0.2.2 on 2026-10-01. Released exports were inspected without constructing hardware backends. Hosted /stable/ support tables now describe development APIs; see review.

Raw lines 1 to 5
6## Architecture
7
8PyLabRobot separates:
9
10- a frontend such as `LiquidHandler`, which validates and records standard
11 operations;
12- a backend, which translates those operations for one device family;
13- a resource/deck tree, which supplies geometry and state.
15A common frontend does not guarantee identical channels, tools, operations,
16parameters, calibration, error semantics, timing, or firmware support.
17Backend-specific kwargs must be reviewed against the exact release implementation and model page.

Architecture

PyLabRobot separates:

  • a frontend such as LiquidHandler, which validates and records standard operations;
  • a backend, which translates those operations for one device family;
  • a resource/deck tree, which supplies geometry and state.

A common frontend does not guarantee identical channels, tools, operations, parameters, calibration, error semantics, timing, or firmware support. Backend-specific kwargs must be reviewed against the exact release implementation and model page.

Raw lines 6 to 18
19## Verified stable liquid-handler names
21```python
22from pylabrobot.liquid_handling import LiquidHandler
23from pylabrobot.liquid_handling.backends import (
24 EVOBackend,
25 LiquidHandlerChatterboxBackend,
26 OpentronsOT2Backend,
27 STARBackend,
28 VantageBackend,
30```
32Do not use stale names from older skill text:
34- `STAR` is not the stable high-level backend name; use `STARBackend`.
35- `TecanBackend` is not the 0.2.2 EVO backend; use `EVOBackend`.
36- `OpentronsBackend` is stale; use `OpentronsOT2Backend`.
37- `ChatterboxBackend` has incorrect naming/capitalization for the recommended
38 generic liquid-handler testing backend; use
39 `LiquidHandlerChatterboxBackend`.
40- `ChatterBoxBackend` (capital `B`) is a separate exported legacy-named class.
41 Avoid it when the stable docs specifically call for
42 `LiquidHandlerChatterboxBackend`.

Verified stable liquid-handler names

from pylabrobot.liquid_handling import LiquidHandler
from pylabrobot.liquid_handling.backends import (
    EVOBackend,
    LiquidHandlerChatterboxBackend,
    OpentronsOT2Backend,
    STARBackend,
    VantageBackend,
)

Do not use stale names from older skill text:

  • STAR is not the stable high-level backend name; use STARBackend.
  • TecanBackend is not the 0.2.2 EVO backend; use EVOBackend.
  • OpentronsBackend is stale; use OpentronsOT2Backend.
  • ChatterboxBackend has incorrect naming/capitalization for the recommended generic liquid-handler testing backend; use LiquidHandlerChatterboxBackend.
  • ChatterBoxBackend (capital B) is a separate exported legacy-named class. Avoid it when the stable docs specifically call for LiquidHandlerChatterboxBackend.
Raw lines 19 to 43
44## Released exports and current support listings
46The 0.2.2 wheel exposes STAR, Vantage, EVO and OT-2 backends listed above.
47The current hosted machine table labels STAR **Full**, Vantage **Mostly**,
48EVO **Basic**, OT-2 **Mostly**, Nimbus **Mostly**, and Prep **WIP**. These are
49upstream development-support assessments, not validation of the 0.2.2 wheel,
50firmware, attachments, or a protocol. Nimbus/Prep entries do not establish a
51portable released backend import. Read the exact device source before using it.
53The hosted table also distinguishes v0 and v1 drivers; these labels are not
54PyLabRobot release numbers. Never infer a released capability from that table
55alone or from inherited method presence.

Released exports and current support listings

The 0.2.2 wheel exposes STAR, Vantage, EVO and OT-2 backends listed above. The current hosted machine table labels STAR Full, Vantage Mostly, EVO Basic, OT-2 Mostly, Nimbus Mostly, and Prep WIP. These are upstream development-support assessments, not validation of the 0.2.2 wheel, firmware, attachments, or a protocol. Nimbus/Prep entries do not establish a portable released backend import. Read the exact device source before using it.

The hosted table also distinguishes v0 and v1 drivers; these labels are not PyLabRobot release numbers. Never infer a released capability from that table alone or from inherited method presence.

Raw lines 44 to 56
57## Offline backend
59```python
60from pylabrobot.liquid_handling import LiquidHandler
61from pylabrobot.liquid_handling.backends import LiquidHandlerChatterboxBackend
62from pylabrobot.resources.hamilton import STARLetDeck
64lh = LiquidHandler(
65 backend=LiquidHandlerChatterboxBackend(num_channels=8),
66 deck=STARLetDeck(),
68await lh.setup()
69try:
70 # Build resources and exercise planned operations only.
71 ...
72finally:
73 await lh.stop()
74```
76This backend prints operations and updates software state. It does not connect
77to a robot and does not model robot physics. Keep the backend construction
78literal; never choose a live class from a string, plugin, environment variable,
79or untrusted config.

Offline backend

from pylabrobot.liquid_handling import LiquidHandler
from pylabrobot.liquid_handling.backends import LiquidHandlerChatterboxBackend
from pylabrobot.resources.hamilton import STARLetDeck

lh = LiquidHandler(
    backend=LiquidHandlerChatterboxBackend(num_channels=8),
    deck=STARLetDeck(),
)
await lh.setup()
try:
    # Build resources and exercise planned operations only.
    ...
finally:
    await lh.stop()

This backend prints operations and updates software state. It does not connect to a robot and does not model robot physics. Keep the backend construction literal; never choose a live class from a string, plugin, environment variable, or untrusted config.

Raw lines 57 to 80
81## Capability/version inspection without connection
83```bash
84python3 skills/pylabrobot/scripts/inspect_backends.py \
85 --expected-version 0.2.2 --strict
86```
88The inspector:
90- imports a fixed allowlist of stable classes only after argument parsing;
91- reads installed distribution metadata;
92- inspects class signatures/method presence;
93- creates zero backend instances;
94- never calls `setup()`;
95- performs no serial, USB, HID, FTDI, Modbus, or network operation.
97Method presence is not proof that a model implements the operation; some
98backends deliberately raise `NotImplementedError`.

Capability/version inspection without connection

python3 skills/pylabrobot/scripts/inspect_backends.py \
  --expected-version 0.2.2 --strict

The inspector:

  • imports a fixed allowlist of stable classes only after argument parsing;
  • reads installed distribution metadata;
  • inspects class signatures/method presence;
  • creates zero backend instances;
  • never calls setup();
  • performs no serial, USB, HID, FTDI, Modbus, or network operation.

Method presence is not proof that a model implements the operation; some backends deliberately raise NotImplementedError.

Raw lines 81 to 99
Runs code python3 skills/pylabrobot/scripts/inspect_backends.py :84
100## Extras and transports
102Base `PyLabRobot==0.2.2` keeps hardware dependencies optional. The release metadata lists extras including:
104- `serial`
105- `usb`
106- `ftdi`
107- `hid`
108- `modbus`
109- `opentrons`
110- `sila`
111- `microscopy`
112- `pico`
113- `all`
115Install only the exact reviewed extra for a named device and keep the top-level
116pin:
118```bash
119# Example form only; do not run until the device and transport are approved.
120uv pip install "PyLabRobot[serial]==0.2.2"
121```
123`all` intentionally does not include microscopy in stable 0.2.2 because of its
124separate NumPy/SDK constraints. Optional transport packages can enumerate or
125communicate with devices; installation does not authorize their use.

Extras and transports

Base PyLabRobot==0.2.2 keeps hardware dependencies optional. The release metadata lists extras including:

  • serial
  • usb
  • ftdi
  • hid
  • modbus
  • opentrons
  • sila
  • microscopy
  • pico
  • all

Install only the exact reviewed extra for a named device and keep the top-level pin:

# Example form only; do not run until the device and transport are approved.
uv pip install "PyLabRobot[serial]==0.2.2"

all intentionally does not include microscopy in stable 0.2.2 because of its separate NumPy/SDK constraints. Optional transport packages can enumerate or communicate with devices; installation does not authorize their use.

Raw lines 100 to 126
127## Live-run gate
129Do not instantiate a live backend or call `setup()` until a trained operator has
130explicitly confirmed:
1321. Backend class, exact robot model/serial number, firmware, options, and
133 transport.
1342. Vendor/organization permission, warranty implications, maintenance state,
135 access controls, and exclusive control of the device.
1363. Deck definition, carriers/adapters, resources, coordinates, orientation,
137 clearances, and collision/motion review.
1384. Calibration, teaching, tip/head compatibility, channel mapping, units,
139 heights, rates, liquid classes, and all backend kwargs.
1405. Source/dead/destination volumes, physical liquid identity, tip state,
141 contamination policy, waste, lids/seals, tubing/cables, and operator steps.
1426. Guards/doors, emergency stop readiness, PPE, containment, dry-run plan,
143 abort path, and recovery/resume rules.
145Never make a live run conditional only on `USE_HARDWARE=true`, a CLI flag, or an
146IP/serial value. Confirmation must be tied to the reviewed protocol and current
147physical setup.

Live-run gate

Do not instantiate a live backend or call setup() until a trained operator has explicitly confirmed:

  1. Backend class, exact robot model/serial number, firmware, options, and transport.
  2. Vendor/organization permission, warranty implications, maintenance state, access controls, and exclusive control of the device.
  3. Deck definition, carriers/adapters, resources, coordinates, orientation, clearances, and collision/motion review.
  4. Calibration, teaching, tip/head compatibility, channel mapping, units, heights, rates, liquid classes, and all backend kwargs.
  5. Source/dead/destination volumes, physical liquid identity, tip state, contamination policy, waste, lids/seals, tubing/cables, and operator steps.
  6. Guards/doors, emergency stop readiness, PPE, containment, dry-run plan, abort path, and recovery/resume rules.

Never make a live run conditional only on USE_HARDWARE=true, a CLI flag, or an IP/serial value. Confirmation must be tied to the reviewed protocol and current physical setup.

Raw lines 127 to 148
149## Backend-specific cautions

Backend-specific cautions

Raw lines 149 to 150
151### Hamilton STAR/Vantage
153These are direct firmware drivers. Upstream states that PyLabRobot is not
154endorsed or supported by robot manufacturers and that firmware-driver use may
155affect warranty. Review USB permissions, device selection, cover/arm/head
156configuration, firmware ranges, liquid-level detection, channels, CO-RE tips,
157and all device-specific errors.

Hamilton STAR/Vantage

These are direct firmware drivers. Upstream states that PyLabRobot is not endorsed or supported by robot manufacturers and that firmware-driver use may affect warranty. Review USB permissions, device selection, cover/arm/head configuration, firmware ranges, liquid-level detection, channels, CO-RE tips, and all device-specific errors.

Raw lines 151 to 158
159### Tecan EVO
161The current hosted EVO support label remains **Basic**. Use `EVOBackend`; verify which LiHa/RoMa
162commands, arms, tips, carriers, and firmware paths are implemented. Never infer
163Hamilton behavior or liquid classes.

Tecan EVO

The current hosted EVO support label remains Basic. Use EVOBackend; verify which LiHa/RoMa commands, arms, tips, carriers, and firmware paths are implemented. Never infer Hamilton behavior or liquid classes.

Raw lines 159 to 164
165### Opentrons OT-2
167`OpentronsOT2Backend(host, port=31950)` uses the optional pinned
168`opentrons-http-api-client==0.2.1`. Its `setup(skip_home=False)` creates an HTTP
169run and homes by default; `skip_home=True` still creates a run and queries the
170robot. Neither is an offline connectivity check. Current 0.2.2 `stop()` tries
171cancellation paths not in the current official HTTP specification and swallows
172failures. **Do not treat successful cleanup as confirmation that a robot stopped.**
173The [transport review](review.md) records exact paths and the supported API
174contract. No robot HTTP request was made during this review.

Opentrons OT-2

OpentronsOT2Backend(host, port=31950) uses the optional pinned opentrons-http-api-client==0.2.1. Its setup(skip_home=False) creates an HTTP run and homes by default; skip_home=True still creates a run and queries the robot. Neither is an offline connectivity check. Current 0.2.2 stop() tries cancellation paths not in the current official HTTP specification and swallows failures. Do not treat successful cleanup as confirmation that a robot stopped. The transport review records exact paths and the supported API contract. No robot HTTP request was made during this review.

Raw lines 165 to 175
176## Stable versus development
178The tested pin is 0.2.2. No `v0.2.2` GitHub tag was listed at review time,
179and the changelog did not have a 0.2.2 section. MicroSpin and plate stacking
180metadata are in the released wheel despite remaining under `Unreleased` in
181the changelog. Prefer the PyPI source artifact plus executable checks.
183When considering a later release:
1851. Confirm it exists on PyPI and is not a prerelease.
1862. Compare `Requires-Python`, extras, tag, changelog, and source.
1873. Run import/signature and software-only tests in an isolated environment.
1884. Revalidate each target model/firmware and repeat commissioning.

Stable versus development

The tested pin is 0.2.2. No v0.2.2 GitHub tag was listed at review time, and the changelog did not have a 0.2.2 section. MicroSpin and plate stacking metadata are in the released wheel despite remaining under Unreleased in the changelog. Prefer the PyPI source artifact plus executable checks.

When considering a later release:

  1. Confirm it exists on PyPI and is not a prerelease.
  2. Compare Requires-Python, extras, tag, changelog, and source.
  3. Run import/signature and software-only tests in an isolated environment.
  4. Revalidate each target model/firmware and repeat commissioning.
Raw lines 176 to 189
190## Sources
192Reviewed **2026-10-01**: [PyPI release files and extras](https://pypi.org/project/PyLabRobot/0.2.2/#files),
193[current supported machines](https://docs.pylabrobot.org/stable/user_guide/machines.html),
194[official Opentrons HTTP specification](https://docs.opentrons.com/http/api_reference.html),
195and the [release/transport evidence ledger](review.md). Support listings and
196physical firmware compatibility were not tested on instruments.

Sources

Reviewed 2026-10-01: PyPI release files and extras, current supported machines, official Opentrons HTTP specification, and the release/transport evidence ledger. Support listings and physical firmware compatibility were not tested on instruments.

Raw lines 190 to 196