On this page 9 sections
PyLabRobot liquid handlers through PyLabRobotDriver (profile plr-liquid-handler-v1)
Generated by MHS/registry/build_registry.py on 2026-10-20T00:00:00Z from 24 registry records and their task cards. A plan, not a conformance claim.
- bridge_status:
available - helper:
PyLabRobotDriver - exemplar:
MHS/drivers/labs/oelemento__star-sim
Launch
Every driver package starts the same way; per-repo configuration (environment id, model path, port, baud rate, VISA resource) lives in the package's driver.py, never in launch flags:
mhs serve <driver-dir>A package is done when python3 -m mhs.driver check <driver-dir> --backend fake exits 0 (evidence contract_checked; a fake never yields an MHS-Device level).
Registry coverage
- Repos: 24
- Decisions: bridge-runtime 1, family-config 2, reference 11, skip 10
- Waves: 2: 1, 5: 1, 9: 22
- Dispatchable now: 0
- Modes: hardware 2, simulated 3
Applicability
An upstream whose control interface is a PyLabRobot LiquidHandler front end, used directly or held by an upstream object (a digital twin's env.lh). The package sets one plr_profile = PlrProfile(...) and no methods; every capability is generated. Exemplar: oelemento/star-sim (simulated STARlet twin). Other PyLabRobot machines (plate readers, incubators, spectrophotometers, scanners) use a direct Driver or PythonObjectDriver; a class that only borrows PyLabRobot method names, a firmware protocol or a remote service without a PyLabRobot front end uses a direct Driver (DEVIATION FROM THE CARD). A card whose entry symbols do not include the class the package drives needs a maintainer override first (G7.NOT_AN_ENTRY_SYMBOL). Single-step aspirate/dispense and the cap.fluid.transfer.v1 / cap.fluid.mix.v1 / cap.fluid.level.v1 classes are not bound by this profile (see the helper guide).
Capability mapping
| native call | OpenMHS target | notes |
|---|---|---|
the upstream object or LiquidHandler(backend=..., deck=...) | lifecycle: the backend factory (fake.py; native.py for hardware) | plr_profile.handler is the attribute path to the LiquidHandler, cited at handler_ref |
setup() | lifecycle: plr_profile.setup, run when the driver opens | on hardware it initializes the instrument (it moves) |
stop() / teardown() | lifecycle: plr_profile.close | PyLabRobot Machine.stop is teardown, never the e-stop |
pick_up_tips, aspirate, dispense, discard_tips | x-cap.<owner>.transfer.v1 (kind transfer, R2) | fresh tips from tip tracking; one well per channel, one column per call; no cleanup motion after a failure |
the same with repeated aspirate/dispense | x-cap.<owner>.mix.v1 (kind mix, R2) | cycles_limit is sourced or Limit.operator_required; a per-operation volume_limit cites its own line |
| a step error other than a bookkeeping error | unknown MHS.OUTCOME.UNKNOWN with the completed steps | it may have reached the device; new effects are fenced until a confirmed stop and an operator reset |
well.tracker.get_used_volume() | x-cap.<owner>.tracked_volumes.v1 (kind tracked_volumes, read, R0) | PyLabRobot bookkeeping, never a liquid-level measurement |
| deck resources by name | PlrLabware(name, kind, ref), kind plate or tip_rack | only names a pinned line states; the input enums are this allowlist |
| a native stop the source shows | plr_profile.stop = PlrStop(native, ref, description) | never a teardown; R2 hardware also needs estop_physical_ref; without a stop the package is blocked |
Class ids come from python3 -m mhs.driver catalog search <words>. The deprecated classes cap.device.describe.v1, cap.world.state.v1, cap.world.snapshot.v1 and cap.world.restore.v1 are replaced by the protocol methods mhs.devices.get, mhs.resource.read, mhs.snapshot and mhs.restore.
Safety
The risk floor of a device is the highest catalogue risk_class of its classes (CAP-017); a driver may declare a higher risk, never a lower one. Hardware at R1 or above needs an @estop and a non-empty safe state. Pipetting and gantry motion are R2 (MHS-004 hazard table); the composite operations carry R2 in every mode. A hardware backend without plr_profile.stop is refused before its factory runs and gate G3 refuses the package: stop with blocked rather than invent a stop or use stop()/teardown. A PlrStop description says what it does not stop (a firmware halt may let the running sequence complete) and must be safe to repeat: the server retries it in the background until it confirms. The bridge sends no PyLabRobot step after an e-stop, cancellation or session close; a step in progress continues. After a failure or an e-stop the tips stay mounted and v1 has no operation that clears them: an operator clears the head (a simulated twin restarts). The loader refuses an unreviewed model-written R2/R3 hardware backend.
Fidelity
A package fake composes mhs.testing.pylabrobot (tip and volume bookkeeping only: no motion, timing, liquid classes or physics); its capacities and starting liquid are placeholders. Evidence stays contract_checked; a fake gate never establishes an MHS-Device level or PyLabRobot behaviour.
Pitfalls
PyLabRobot tip tracking is off unless the upstream switches it on: fresh-tip selection needs the cited set_tip_tracking(True) line. Vendored PyLabRobot copies differ by version. Deck layouts often live in scripts or operator code; only labware a pinned line names can be declared. Upstream protocols often discard tips in a finally block; the helper deliberately does not. The gate reads every profile reference as code (ast, one line, operation spans of at most 40 lines). The gate's conformance suite repeats one payload, so give every operation an alternate fixture. A deck of more than about ten plate names exceeds the 2048-byte tool budget (G8.TOOL_SIZE).
First task cards
gh.oelemento/star-sim: family-config, wave 2, rank 149,MHS/registry/tasks/labs/oelemento__star-sim.jsongh.aicell-lab/hamilton-control: family-config, wave 5, rank 47,MHS/registry/tasks/labs/aicell-lab__hamilton-control.jsongh.pylabrobot/pylabrobot: bridge-runtime, wave 9, rank 20,MHS/registry/tasks/labs/pylabrobot__pylabrobot.jsongh.bioprotocols/labop: reference, wave 9, rank 459,MHS/registry/tasks/labs/bioprotocols__labop.jsongh.maraxen/praxis: reference, wave 9, rank 684,MHS/registry/tasks/labs/maraxen__praxis.json
Sources
- Task cards:
MHS/registry/tasks/<track>/<owner>__<repo>.json(schema/taskcard.schema.json). - Triage rules and the helper table:
MHS/registry/triage.py; curated decisions:MHS/registry/overrides/. - Driver API and gate:
MHS/sdk/docs/driver-authoring.md; exemplars:MHS/drivers/. - PyLabRobot helper guide.
- star-sim exemplar driver, fake, tests and result/evidence scope.
Packages
Top 24 of 24 by stars. Filter the full list.
| Package | Tier | Ring | Evidence | Stars |
|---|---|---|---|---|
| pylabrobot/pylabrobot pylabrobot/pylabrobot: pipetting and multi device SDK for wet-lab automation and chemistry (lab instrumentation track). | Tier A | 3 | agent read | 563 |
| bioprotocols/labop bioprotocols/labop: protocol implementation/bridge; orchestration/scheduling (lab instrumentation track). OpenMHS plan: | Tier D | 3 | static scan | 51 |
| pioneer-research-labs/ngs_library_prep pioneer-research-labs/ngs_library_prep: orchestration/scheduling for liquid handling (lab instrumentation track). OpenMH | Tier D | 3 | static scan | 12 |
| maraxen/praxis maraxen/praxis: orchestration/scheduling for liquid handling (lab instrumentation track). OpenMHS plan: reference only ( | Tier D | 3 | static scan | 4 |
| pylabrobot/slas_2026_demos pylabrobot/slas_2026_demos: orchestration/scheduling for liquid handling (lab instrumentation track). OpenMHS plan: not | Tier D | 3 | static scan | 2 |
| stefangolas/pylabrobot_llm_example stefangolas/pylabrobot_llm_example: agent framework for liquid handling (lab instrumentation track). OpenMHS plan: not i | Tier D | 3 | static scan | 2 |
| di-omics/plr-lab-robot di-omics/plr-lab-robot: complete environment for robot arm manipulation (lab instrumentation track). OpenMHS plan: not i | Tier D | 3 | static scan | 1 |
| vcjdeboer/nanodrop-pylabrobot-demo vcjdeboer/nanodrop-pylabrobot-demo: device backend for optics (lab instrumentation track). OpenMHS plan: not integrated | Tier D | 3 | static scan | 1 |
| aicell-lab/hamilton-control aicell-lab/hamilton-control: device backend for liquid handling (lab instrumentation track). OpenMHS plan: family-config | Tier B | 3 | static scan | 0 |
| anupama29k/protocol-simulation anupama29k/protocol-simulation: complete environment for biology (lab instrumentation track). OpenMHS plan: not integrat | Tier D | 3 | static scan | 0 |
| anupama29k/robotic-assays anupama29k/robotic-assays: orchestration/scheduling for biology (lab instrumentation track). OpenMHS plan: reference onl | Tier D | 3 | static scan | 0 |
| brooklynvar/llm_protocol_validation brooklynvar/llm_protocol_validation: agent framework for liquid handling (lab instrumentation track). OpenMHS plan: refe | Tier D | 3 | static scan | 0 |
| cheshire-labs/cheshire-drivers cheshire-labs/cheshire-drivers: multi device simulation SDK for wet-lab automation and chemistry (lab instrumentation tr | Tier D | 3 | static scan | 0 |
| chory-lab/plr-cookbook chory-lab/plr-cookbook: auxiliary tooling for liquid handling (lab instrumentation track). OpenMHS plan: not integrated | Tier D | 3 | static scan | 0 |
| di-omics/autonomous-lab di-omics/autonomous-lab: orchestration/scheduling for general (lab instrumentation track). OpenMHS plan: reference only | Tier D | 3 | static scan | 0 |
| di-omics/bay-hack di-omics/bay-hack: complete environment for liquid handling (lab instrumentation track). OpenMHS plan: reference only (p | Tier D | 3 | static scan | 0 |
| di-omics/plr-mcp di-omics/plr-mcp: protocol implementation/bridge for liquid handling (lab instrumentation track). OpenMHS plan: referenc | Tier D | 3 | static scan | 0 |
| elijahchang929/opentrons-to-pylabrobot elijahchang929/opentrons-to-pylabrobot: auxiliary tooling for liquid handling (lab instrumentation track). OpenMHS plan: | Tier D | 3 | static scan | 0 |
| hansonlee2017/hamilton_star_visualizer hansonlee2017/hamilton_star_visualizer: auxiliary tooling for liquid handling (lab instrumentation track). OpenMHS plan: | Tier D | 3 | static scan | 0 |
| ivoryos-ai/ivoryos-pylabrobot-integration ivoryos-ai/ivoryos-pylabrobot-integration: orchestration/scheduling for liquid handling (lab instrumentation track). Ope | Tier D | 3 | static scan | 0 |
| m9h/biopunk-jubilee m9h/biopunk-jubilee: auxiliary tooling for biology (lab instrumentation track). OpenMHS plan: not integrated (skip:not-d | Tier D | 3 | static scan | 0 |
| oelemento/star-sim oelemento/star-sim: device backend for liquid handling (lab instrumentation track). OpenMHS plan: family-config with PyL | Tier A | 1 | contract checked | 0 |
| vcjdeboer/v1b1-skills vcjdeboer/v1b1-skills: auxiliary tooling for general (lab instrumentation track). OpenMHS plan: not integrated (skip:too | Tier D | 3 | static scan | 0 |
| zym666zym666/pylabrobotandllm zym666zym666/pylabrobotandllm: orchestration/scheduling for liquid handling (lab instrumentation track). OpenMHS plan: r | Tier D | 3 | static scan | 0 |