Operator UI
Start and monitor your Runs in real time from the production floor.

Overview
The Operator UI lets you run and track test procedures deployed on your production stations. It provides a simple, focused interface for production operators to start tests, respond to prompts, and monitor progress live.
Integration
The Operator UI is currently available with OpenHTF. Python client support is coming soon.
Prerequisites
Upgrade the Python client to version ≥ 1.11.0
pip install --upgrade tofupilot
How it works
-
Run your OpenHTF script.
-
You'll see a message like this in your console:
Connected to TofuPilot real-time server Access Operator UI: [clickable_URL_to_Operator_UI]
-
Click the URL to open the Operator UI in TofuPilot.
Share the URL to let others watch the test live. Only the authorized user can interact with it.
Script example
Below is a test script using OpenHTF and TofuPilot. The test begins with a serial number prompt. It combines automated checks (e.g., power_on
) and operator input (e.g., prompt_operator_led_color
, prompt_operator_next_step
), reflecting typical production workflows.
import openhtf as htf from openhtf.plugs.user_input import UserInput from openhtf.plugs import user_input from tofupilot.openhtf import TofuPilot import time def power_on(): time.sleep(1) return htf.PhaseResult.CONTINUE @htf.plug(user_input=UserInput) def prompt_operator_next(user_input): user_input.prompt( message="Click Next when the LED turn on", text_input=False, # Button prompt from operator ) @htf.measures(htf.Measurement("led_color").equals("Green")) @htf.plug(user_input=UserInput) def prompt_operator_led_color(test, user_input): led_color = user_input.prompt( message="What is the LED color? (Green/Red/Blue)", text_input=True, # Text prompt from operator ) test.measurements.led_color = led_color def main(): test = htf.Test( power_on, prompt_operator_next, prompt_operator_led_color, procedure_id="FVT1", part_number="PCB1", ) with TofuPilot(test): test.execute(test_start=user_input.prompt_for_test_start()) # Prompt at start if __name__ == "__main__": main()
Prompt configuration
Use user_input.prompt(message, text_input) to show instructions or questions to the operator in the UI. Depending on the prompt type, the UI will either show a text input field or a simple Next button.
user_input.prompt("What is the LED color?", text_input=True)
- Name
openhtf.plugs.user_input.prompt(message, text_input)
- Type
- str → str
- Description
Displays a text prompt in the UI and returns the operator's response.
- Name
message
- Type
- str
- Description
The instruction or question shown to the operator in the UI.
- Name
text_input
- Type
- bool
- Description
If
True
, the prompt displays a text box for operator input (e.g., typing "Green"). IfFalse
, it shows a "Next" button.
Streaming control
By default, test results are streamed live to the Operator UI. To disable streaming:
with TofuPilot(test, stream=False):
In-app view
The Operator UI connects your test scripts to real-time visibility on the production floor. When a test starts, a unique URL appears in your console — follow it to view live test streaming.
You'll see:
- Prompts and operator responses
- Procedure metadata (ID, name, version)
- Run info (UUID, duration, logs)
- Phases and measurements (status, value(s), limits, units, durations, attachments)
- User or station info (based on the API key)
Live Test Streaming
The Operator UI updates in real time as the test progresses. In this screenshot, the test has completed and is now waiting for the next execution to begin. The previous test has been uploaded to TofuPilot and we can see information about the previous test (status, procedure ID, ...).

Manual Serial Number Input
Some procedures start with a manual input, typically a serial number. To ensure this input is collected before the test starts, pass the user prompt as the test_start
parameter when calling test.execute()
(see code example above).

Even before the test is started, you can already see the associated metadata: procedure ID, part number, part revision, and hardware revision. The serial number will be displayed when user will submit it.
Custom Operator Prompts
You can configure custom prompts in your test script. In this example, the operator is asked to confirm the LED color during test. This allows you to combine automated steps with manual validation.

Phase and Measurement Details
Each test phase is displayed as it runs, along with its duration and result. You can track all measurement types in real time — numeric, string, boolean, or even tables — along with their units, limits, validator, and status.
