PUDA Machines
Goal
Provide machine-selection and capability guidance for PUDA workflows, then load the correct machine reference before generating commands.
Critical Rule
If you are unsure which machine should be used for a command, ask the user before proceeding.
Do not assume.
Machine Capabilities and When to Use
First Machine (machine_id: "first")
Use for liquid handling and deck operations.
Capabilities:
- Pipetting workflows: aspirate, dispense, attach tip, drop tip
- Deck and labware workflows: load deck, position-dependent operations
- Sequenced robotic handling steps in wet-lab protocols
Use this machine when:
- The task is about moving liquids between wells/labware
- The user mentions tip usage, aspiration/dispensing, or deck slots/labware setup
Before command generation:
- Refer to: first-machine
- Run
puda machine commands first to understand available commands
- Follow constraints and sequencing in
references/first-machine.md
PipQuBotV3 Machine (machine_id: "pipqubotv3")
Use for liquid handling and deck operations.
Capabilities:
- Pipetting workflows: aspirate, dispense, attach tip, drop tip
- Deck and labware workflows: load deck, position-dependent operations
- Sequenced robotic handling steps in wet-lab protocols
Use this machine when:
- The task is about moving liquids between wells/labware
- The user mentions tip usage, aspiration/dispensing, or deck slots/labware setup
Before command generation:
- Refer to: pipqubotv3-machine
- Run
puda machine commands pipqubotv3 to understand available commands
- Follow constraints and sequencing in
references/pipqubotv3-machine.md
Biologic Machine (machine_id: "biologic")
Use for electrochemical testing and characterization.
Capabilities:
- OCV (Open Circuit Voltage)
- CA (Chronoamperometry)
- PEIS / GEIS (Impedance spectroscopy)
- CV (Cyclic Voltammetry)
- MPP variants (MPP, MPP_Cycles, MPP_Tracking)
Use this machine when:
- The task is an electrochemical measurement or battery/cell characterization
- The user asks for OCV, CA, EIS, CV, or MPP tests
Before command generation:
- Refer to: biologic-machine
- Run
puda machine commands biologic to understand available commands
- Follow constraints in
references/biologic-machine.md
Centrifuge Machine (machine_id: "centrifuge")
Use for centrifugation, spin-downs, and phase or pellet separation.
Capabilities:
- Sample spin-downs before or after handling steps
- Separation workflows based on centrifugal force
- Pelleting, clarification, and phase-separation preparation steps
Use this machine when:
- The user asks to centrifuge, spin, spin down, pellet, or clarify samples
Before command generation:
- Refer to: centrifuge-machine
- Run
puda machine commands centrifuge to understand available commands
- Follow constraints in
references/centrifuge-machine.md
Dobot M1Pro Machine (machine_id: "dobot-m1pro")
Use for gripper-based tube transfers between fixed positions.
Capabilities:
- Pick-and-place tube handling with a gripper
- Moving tubes between predefined source and destination positions
- Position-based transfer steps between pipqubotv3, bioshake, centrifuge machines
Use this machine when:
- The user asks to transfer tubes with a gripper
- The workflow involves moving tubes between known hardcoded positions
- A step references Dobot M1Pro positions such as centrifuge tube or MTP coordinates
Before command generation:
- Refer to: dobot-m1pro-machine
- Run
puda machine commands dobot-m1pro to understand available commands
- Follow constraints in
references/dobot-m1pro-machine.md
BioShake Machine (machine_id: "bioshake")
Use for shaking, heating, and plate clamping operations.
Capabilities:
- Shaking at a specified RPM for a given duration
- Heating (or cooling) to a target temperature and holding for a given duration
- Clamping and unclamping plates on the shaker
- Homing the shaker to its locked home position
Use this machine when:
- The user asks to shake, vortex, or mix a plate on a shaker
- The user asks to heat or incubate a plate at a specific temperature
- The user asks to clamp or unclamp a plate on the BioShake
- The workflow requires holding a plate at temperature while shaking
Before command generation:
- Run
puda machine commands bioshake to understand available commands
Balance Machine
Use for gravimetric mass measurement via an Arduino-based USB load-cell balance on Linux.
Capabilities:
- Continuous calibrated mass readings from a load-cell over USB serial (
/dev/ttyUSB* or /dev/ttyACM*)
- Background reader thread streaming readings at ~4 Hz; no polling required
- Tare command to zero the balance before a dispense step
- Freshness check (
fresh flag) to detect stale/disconnected readings
- NATS telemetry publishing via the edge service
- Custom calibration CSV support
Use this machine when:
- The workflow requires weighing a container before or after a liquid transfer
- The user asks for gravimetric calibration, transfer error calculation, or balance feedback
- The task involves viscosity or transfer accuracy experiments needing mass data
Before use:
- Refer to: balance-machine
- Ask the user for the Linux serial port (
/dev/ttyUSB1, etc.) — do not assume
- Ensure the edge service is running (
uv run --package balance-edge python edge/balance.py)
Opentrons Machine (machine_id: "opentrons")
Use for automated liquid handling and full protocol generation on the Opentrons OT-2 robot.
Capabilities:
- Full protocol code generation via
Protocol.to_python_code() — produces valid runnable OT-2 Python
- Pipetting workflows:
aspirate, dispense, mix, transfer (with auto-chunking for large volumes)
- Tip management:
pick_up_tip, drop_tip
- Deck and labware setup:
load_labware, load_instrument
- Flow control:
flow_rate, air_gap, blow_out, touch_tip, move_to
- Protocol utilities:
delay, comment, home
- CSV-driven loops:
read_csv_file + loop for data-driven protocols
- Custom labware support: AMDM mass balance vials (30 mL, 50 mL) loaded inline
- All gen2 pipette types: p10, p20, p300, p1000 (single and multi-channel)
- External camera image capture:
camera_capture — triggers the external camera mounted above the deck to capture and save a still image of the wellplate
Use this machine when:
- The user references an Opentrons OT-2 robot
- The task involves generating a complete OT-2 protocol or individual liquid handling commands
- The user mentions Opentrons labware (tip racks, well plates, reservoirs, NEST, Corning, mass balance vials)
- The workflow requires data-driven dispensing from a CSV file
- The workflow requires capturing a camera image of the wellplate after dispensing steps
Before command generation:
- Refer to: opentrons-machine
- Run
puda machine commands opentrons to understand available commands
- Follow all command types, params, sequencing rules, and labware constraints in
references/opentrons-machine.md
Selection Workflow
- Parse user intent and identify the tasks.
- Match intent to the machine capabilities above.
- If machine selection is unclear or ambiguous, ask the user and wait for confirmation.
- Load the corresponding reference file and CLI help.
- Generate commands only after machine choice is confirmed.
Output Guidance
When answering machine-selection questions:
- State the recommended machine and a one-line reason tied to capability.
- If uncertain, ask a direct clarification question instead of guessing.
Critical sequencing rules
bioshake must not be shaking while any machine is operating on a Bioshake position.
centrifuge must not be spinning while any machine is operating on a Centrifuge position.
opentrons protocols must always end with no tip attached to any pipette.
opentrons deck slot (location) for every load_labware command must be explicitly confirmed by the user — never assume a slot.
opentrons capture_image must be its own standalone protocol — never combined with pipetting commands in the same protocol.
balance — always call startup() before reading and shutdown() after. Always tare before a dispense step. Always verify fresh == True before using a reading.
1---2name: ntu-machines3description: Discover PUDA machine capabilities in ntu lab and choose the right machines for protocol generation. Use when you need to know more about a machine, how to use a machine, or how to generate commands and protocols for any PUDA-connected machine4---56# PUDA Machines78## Goal910Provide machine-selection and capability guidance for PUDA workflows, then load the correct machine reference before generating commands.1112## Critical Rule1314If you are unsure which machine should be used for a command, **ask the user** before proceeding. 15Do **not** assume.1617## Machine Capabilities and When to Use1819### First Machine (`machine_id: "first"`)2021Use for **liquid handling and deck operations**.2223Capabilities:24- Pipetting workflows: aspirate, dispense, attach tip, drop tip25- Deck and labware workflows: load deck, position-dependent operations26- Sequenced robotic handling steps in wet-lab protocols2728Use this machine when:29- The task is about moving liquids between wells/labware30- The user mentions tip usage, aspiration/dispensing, or deck slots/labware setup3132Before command generation:33- Refer to: [first-machine](references/first-machine.md)34- Run `puda machine commands first` to understand available commands35- Follow constraints and sequencing in `references/first-machine.md`3637### PipQuBotV3 Machine (`machine_id: "pipqubotv3"`)3839Use for **liquid handling and deck operations**.4041Capabilities:42- Pipetting workflows: aspirate, dispense, attach tip, drop tip43- Deck and labware workflows: load deck, position-dependent operations44- Sequenced robotic handling steps in wet-lab protocols4546Use this machine when:47- The task is about moving liquids between wells/labware48- The user mentions tip usage, aspiration/dispensing, or deck slots/labware setup4950Before command generation:51- Refer to: [pipqubotv3-machine](references/pipqubotv3-machine.md)52- Run `puda machine commands pipqubotv3` to understand available commands53- Follow constraints and sequencing in `references/pipqubotv3-machine.md`5455### Biologic Machine (`machine_id: "biologic"`)5657Use for **electrochemical testing and characterization**.5859Capabilities:60- OCV (Open Circuit Voltage)61- CA (Chronoamperometry)62- PEIS / GEIS (Impedance spectroscopy)63- CV (Cyclic Voltammetry)64- MPP variants (MPP, MPP_Cycles, MPP_Tracking)6566Use this machine when:67- The task is an electrochemical measurement or battery/cell characterization68- The user asks for OCV, CA, EIS, CV, or MPP tests6970Before command generation:71- Refer to: [biologic-machine](references/biologic-machine.md)72- Run `puda machine commands biologic` to understand available commands73- Follow constraints in `references/biologic-machine.md`7475### Centrifuge Machine (`machine_id: "centrifuge"`)7677Use for **centrifugation, spin-downs, and phase or pellet separation**.7879Capabilities:80- Sample spin-downs before or after handling steps81- Separation workflows based on centrifugal force82- Pelleting, clarification, and phase-separation preparation steps8384Use this machine when:85- The user asks to centrifuge, spin, spin down, pellet, or clarify samples8687Before command generation:88- Refer to: [centrifuge-machine](references/centrifuge-machine.md)89- Run `puda machine commands centrifuge` to understand available commands90- Follow constraints in `references/centrifuge-machine.md`9192### Dobot M1Pro Machine (`machine_id: "dobot-m1pro"`)9394Use for **gripper-based tube transfers between fixed positions**.9596Capabilities:97- Pick-and-place tube handling with a gripper98- Moving tubes between predefined source and destination positions99- Position-based transfer steps between pipqubotv3, bioshake, centrifuge machines100101Use this machine when:102- The user asks to transfer tubes with a gripper103- The workflow involves moving tubes between known hardcoded positions104- A step references Dobot M1Pro positions such as centrifuge tube or MTP coordinates105106Before command generation:107- Refer to: [dobot-m1pro-machine](references/dobot-m1pro-machine.md)108- Run `puda machine commands dobot-m1pro` to understand available commands109- Follow constraints in `references/dobot-m1pro-machine.md`110111### BioShake Machine (`machine_id: "bioshake"`)112113Use for **shaking, heating, and plate clamping operations**.114115Capabilities:116- Shaking at a specified RPM for a given duration117- Heating (or cooling) to a target temperature and holding for a given duration118- Clamping and unclamping plates on the shaker119- Homing the shaker to its locked home position120121Use this machine when:122- The user asks to shake, vortex, or mix a plate on a shaker123- The user asks to heat or incubate a plate at a specific temperature124- The user asks to clamp or unclamp a plate on the BioShake125- The workflow requires holding a plate at temperature while shaking126127Before command generation:128- Run `puda machine commands bioshake` to understand available commands129130### Balance Machine131132Use for **gravimetric mass measurement via an Arduino-based USB load-cell balance on Linux**.133134Capabilities:135- Continuous calibrated mass readings from a load-cell over USB serial (`/dev/ttyUSB*` or `/dev/ttyACM*`)136- Background reader thread streaming readings at ~4 Hz; no polling required137- Tare command to zero the balance before a dispense step138- Freshness check (`fresh` flag) to detect stale/disconnected readings139- NATS telemetry publishing via the edge service140- Custom calibration CSV support141142Use this machine when:143- The workflow requires weighing a container before or after a liquid transfer144- The user asks for gravimetric calibration, transfer error calculation, or balance feedback145- The task involves viscosity or transfer accuracy experiments needing mass data146147Before use:148- Refer to: [balance-machine](references/balance-machine.md)149- Ask the user for the **Linux serial port** (`/dev/ttyUSB1`, etc.) — do not assume150- Ensure the edge service is running (`uv run --package balance-edge python edge/balance.py`)151152### Opentrons Machine (`machine_id: "opentrons"`)153154Use for **automated liquid handling and full protocol generation on the Opentrons OT-2 robot**.155156Capabilities:157- Full protocol code generation via `Protocol.to_python_code()` — produces valid runnable OT-2 Python158- Pipetting workflows: `aspirate`, `dispense`, `mix`, `transfer` (with auto-chunking for large volumes)159- Tip management: `pick_up_tip`, `drop_tip`160- Deck and labware setup: `load_labware`, `load_instrument`161- Flow control: `flow_rate`, `air_gap`, `blow_out`, `touch_tip`, `move_to`162- Protocol utilities: `delay`, `comment`, `home`163- CSV-driven loops: `read_csv_file` + `loop` for data-driven protocols164- Custom labware support: AMDM mass balance vials (30 mL, 50 mL) loaded inline165- All gen2 pipette types: p10, p20, p300, p1000 (single and multi-channel)166- **External camera image capture**: `camera_capture` — triggers the external camera mounted above the deck to capture and save a still image of the wellplate167168Use this machine when:169- The user references an Opentrons OT-2 robot170- The task involves generating a complete OT-2 protocol or individual liquid handling commands171- The user mentions Opentrons labware (tip racks, well plates, reservoirs, NEST, Corning, mass balance vials)172- The workflow requires data-driven dispensing from a CSV file173- The workflow requires capturing a camera image of the wellplate after dispensing steps174175Before command generation:176- Refer to: [opentrons-machine](references/opentrons-machine.md)177- Run `puda machine commands opentrons` to understand available commands178- Follow all command types, params, sequencing rules, and labware constraints in `references/opentrons-machine.md`179180181## Selection Workflow1821831. Parse user intent and identify the tasks.1842. Match intent to the machine capabilities above.1853. If machine selection is unclear or ambiguous, **ask the user** and wait for confirmation.1864. Load the corresponding reference file and CLI help.1875. Generate commands only after machine choice is confirmed.188189## Output Guidance190191When answering machine-selection questions:192- State the recommended machine and a one-line reason tied to capability.193- If uncertain, ask a direct clarification question instead of guessing.194195## Critical sequencing rules1961. `bioshake` must not be shaking while any machine is operating on a Bioshake position.1972. `centrifuge` must not be spinning while any machine is operating on a Centrifuge position.1983. `opentrons` protocols must always end with no tip attached to any pipette.1994. `opentrons` deck slot (`location`) for every `load_labware` command must be explicitly confirmed by the user — **never assume a slot**.2005. `opentrons` `capture_image` must be its own standalone protocol — never combined with pipetting commands in the same protocol.2016. `balance` — always call `startup()` before reading and `shutdown()` after. Always tare before a dispense step. Always verify `fresh == True` before using a reading.202