Questions & Answers
Direct answers to the most common questions about TofuPilot: product features, pricing, security, OpenHTF and pytest integrations, and self-hosting.
Integrations
Connecting TofuPilot with OpenHTF, pytest, LabVIEW, instruments, and other tools.
Can instrument connections stay open across an entire unit or station session?
Yes. Plugs have a lifecycle scope: phase, slot, run, or station. With scope: station, the plug class is constructed once in a long-lived Python process, its…What is TofuPilot's relationship with OpenHTF?
We've used TofuPilot for years on drone manufacturing floors and maintain openhtf.org, the open-source OpenHTF documentation site. We're also close to the…Can I sync TofuPilot test failures to Linear?
Yes. The Linear integration lets failing runs and phases open or update tickets from the dashboard. It offers two actions: Create issue (with optional…How do I migrate from NI TestStand to TofuPilot?
Export an NI TestStand XML report (.xml) and create a procedure in the dashboard. Drag the .xml onto the import page and click Import; TofuPilot auto-detects…How do I install the TofuPilot Python SDK?
Install from PyPI: pip install tofupilot. Import it as "from tofupilot.v2 import TofuPilot". Pass your API key to the constructor or set the TOFUPILOT_API_KEY…Can TofuPilot sync test results to InvenTree?
Yes. The InvenTree integration writes TofuPilot test data into your InvenTree instance so build outputs, stock items, and test reports stay in sync. Five…Can TofuPilot alert me when a measurement drifts or a unit fails?
Yes. Workflows trigger on run events and send notifications through Slack, Discord, email, or HTTP calls, and AI alerts watch for anomalies such as measurement…Can I query my TofuPilot test data in natural language?
Yes, with TofuPilot Chat. It answers questions across every run, unit, part, batch, and station in your organization. Chat calls typed tools backed by the REST…What is TofuPilot Agent?
TofuPilot Agent runs autonomous root cause analysis on failing units inside the chat interface. It frames the failure in plain language, hypothesizes candidate…Can I attach files to a test run in TofuPilot?
Yes. An attachment is a binary file persisted alongside a run, such as a photo, a scope capture, a diagnostic dump, or a PDF report. Each attachment belongs to…How do I run a test procedure with the TofuPilot CLI?
Run tofupilot run [PATH], where PATH is an optional procedure .yaml file, directory, or Python entry point. Without a path it runs locally and, without…What is a sub-unit in TofuPilot?
A sub-unit is a child unit assembled into a parent unit, such as a PCB inside a finished product. A parent unit can reference multiple sub-units by their child…What's the difference between a part, revision, and unit?
A part is the product or component family that units belong to (e.g. PCB-V1). A revision is a version of a part; it defaults to A. A unit is the individual…How do I install TofuPilot on Linux?
Run the install script in a terminal: curl -fsSL https://tofupilot.sh/install | sh. This installs the tofupilot CLI. To register a machine as a station,…How do I uninstall TofuPilot?
Run tofupilot uninstall. It removes the CLI binary and, by default, every local data file including queued uploads, pulled deployments, and cached config. Use…What can I do with the TofuPilot CLI?
The CLI has 26+ subcommands. Common ones: tofupilot login/logout/whoami (auth), tofupilot run (execute a procedure locally with the operator UI), tofupilot…Can TofuPilot connect to my ERP (Odoo)?
Yes. The Odoo integration pushes test data into your Odoo instance so production records, quality checks, and chatter stay in sync. Three actions are…What is a batch in TofuPilot?
A batch groups units you produced together, such as a manufacturing lot, a build day, or a contract manufacturer shipment. Its identity is its number; all…How do I deploy a procedure with the TofuPilot CLI?
Run tofupilot deploy from a directory linked to a procedure that contains a pyproject.toml. It uploads the local source tree, builds it in the cloud, and…How do I import OpenHTF results into TofuPilot?
Save an OpenHTF test record as JSON via the OutputToJSON callback and create a procedure in the dashboard. Drag the .json file to the dropzone (auto-detected…Can TofuPilot call any external API over HTTP?
Yes. The HTTP integration lets a workflow send a request to any URL, so TofuPilot events can trigger systems without a native integration. It supports GET,…Does TofuPilot have an MCP server for AI agents?
Yes. The TofuPilot MCP server lets AI agents (Claude, Cursor, and any Model Context Protocol client) work with your test data. It exposes read tools by default…What happens if a long test run crashes near the end?
Phases are isolated on worker processes: if one dies, the engine replaces it and execution continues instead of taking the whole run down, and retries are…Can an MES block a unit before the test runs?
Yes, in both directions. The MES check runs as the first step of the execution, before any test phase: if the MES refuses the unit, the run stops there and the…Does the Rust engine run each Python test in a separate process?
Two mechanisms. Plugs run as persistent processes, one per plug instance, addressed over a local TCP socket, so instrument objects and their state stay alive…How many units can a station test in parallel?
Parallel slots are native to the execution engine, which is why it is written in Rust. Configurations of a few slots up to several dozen are normal operation,…How do I integrate OpenHTF with TofuPilot?
Deployed through the TofuPilot CLI, OpenHTF scripts stream live test data and the operator UI with zero configuration. Standalone, it takes one wrapper: import…How do I record the operator of a test in TofuPilot?
Pass the operated_by field (operator email) when creating the run through the API or SDK. The run then shows the operator identity in the dashboard, separate…Do test stations need permanent internet access?
No. Every completed run is persisted to a local queue before upload; a background loop drains it every few seconds and retries with backoff from 15 seconds up…How do I install TofuPilot on macOS?
Run curl -fsSL https://tofupilot.sh/install | sh in Terminal to install the tofupilot CLI (same command as Linux). Register a station headlessly with tofupilot…How do I install the TofuPilot CLI?
Run the install script on Linux or macOS: curl -fsSL https://tofupilot.sh/install | sh. A PowerShell variant is available for Windows. After installing, run…Does TofuPilot run on Windows?
Yes. The CLI, Station, and Studio run on Windows through a PowerShell installer. Linux and macOS are also fully supported.How do I migrate an existing test suite to TofuPilot without downtime?
TofuPilot supports incremental migration: migrate one product line at a time (vertical), one test stage at a time (horizontal), or a mix (hybrid). Your legacy…Does TofuPilot work with OpenHTF, pytest, and Robot Framework?
Yes. TofuPilot supports OpenHTF, pytest, Robot Framework, and its own open-source TofuPilot framework. Any custom framework can integrate through the REST API…Can I upload OpenHTF results that were recorded offline?
Yes. Write the OpenHTF JSON report to disk, then upload it later with client.create_run_from_openhtf_report("./report.json"). Original timestamps are…How do I add a TofuPilot desktop shortcut to a station?
In the dashboard, go to Stations, select the station, open Setup, and toggle "Desktop shortcut" on. The CLI writes a launcher to the station's desktop…Can I use pytest for hardware testing with TofuPilot?
Yes. The CLI runs pytest suites natively under an embedded plugin: each test_* function becomes a phase, and assert statements like "assert lo <= x <= hi"…Can I create TofuPilot test phases dynamically at runtime?
In the TofuPilot framework, phases are declared in a YAML procedure and each phase runs a Python function. If you need programmatic phase generation at…Are TofuPilot measurements scoped to a test phase?
Measurements belong to the phase that records them. Each measurement is a typed value (number, string, boolean, JSON, or multi-dimensional series) validated…Can I control lab instruments over SCPI, VISA, or LabVIEW?
Python is the primary scripting language, so instrument control works through standard libraries like PyVISA, pyserial, or pymodbus inside plugs, which hold…Which operating systems does TofuPilot support?
The TofuPilot CLI supports Linux, macOS, and Windows. On macOS and Linux, install with curl -fsSL https://tofupilot.sh/install | sh; on Windows, run the…How do I create a test run with the TofuPilot API?
Use the Python SDK (client.runs.create with procedure_id, serial_number, part_number, outcome, and phases) or the REST endpoint POST…How do I update the TofuPilot CLI?
Run tofupilot update. It checks for a newer CLI release and installs it in place. The CLI also checks in the background and prompts you when an update is…How do I create and manage API keys?
Open Settings > API keys, click Create key, name it, and pick an expiry. The key is shown once. There are two types: user keys, which inherit your role and…Does TofuPilot integrate with Slack?
Yes. TofuPilot posts a message to a Slack channel whenever a workflow fires, using a Slack incoming webhook (no OAuth app or token management). Create an…Can I edit TofuPilot run metadata after upload?
Yes. The v2 endpoint PATCH /v2/runs/{id}/metadata upserts custom metadata key-value pairs on a run after ingestion. To correct a unit's serial number or part…How do I fetch a unit's latest test run via the TofuPilot API?
Query runs.list filtered by serial number, sorted by start time descending with limit=1. For per-unit lifetime views in the dashboard, use the Unit Explorer.Does TofuPilot have a REST API without the SDK?
Yes. The full platform is exposed as a REST API at https://www.tofupilot.app/api/v2 with API-key authentication, pagination, and typed error codes. Every…Can one test station run multiple procedures?
Yes. Deploy each procedure to the station; the operator then selects which procedure to run from the station UI. A station can hold as many procedures as your…Can stations run headless, for example in CI or a rack with no display?
Yes. Stations authenticate with long-lived station keys instead of interactive login. The install command embeds a single-use setup token (valid one hour,…How do I install system packages (non-Python dependencies) on a station?
Install native system dependencies on the machine's system Python, then enable the "System packages" toggle in the station's Setup. On every deployment the CLI…How do I launch a TofuPilot station on boot?
Use the launch-on-boot setting; the CLI installs a system service (systemd on Linux) so the station starts with the machine, including root-level system…Can I roll back a bad deployment in TofuPilot?
Yes. Open the deployment's menu in the dashboard and select Instant Rollback to revert stations to any previous deployment immediately. Rollback is…How do I import test results from a CSV file?
You need a CSV with a header row and a procedure created in the dashboard. Drop the .csv on the procedure's import page, click the row to open the mapping…Does TofuPilot integrate with Discord?
Yes. TofuPilot posts a message to a Discord channel whenever a workflow fires, via a Discord webhook, so you do not need to host a bot. In Discord, create a…What file formats can I import into TofuPilot?
TofuPilot imports nine formats in two categories. Tabular (require field mapping): CSV and Excel (.xlsx). Structured (auto-detected): STDF, ATDF, ATML, NI…How do I import an Excel file into TofuPilot?
You need an Excel workbook (.xlsx) with a header row and a procedure created in the dashboard. Drop the .xlsx on the import page, click the row to open the…What analytics does TofuPilot provide out of the box?
First pass yield, Cpk and control charts (measurement control), phase Pareto by failure rate and duration, run and unit explorers with filtering, and log…Why does my Cpk drop when tests correctly catch failing units?
Cpk measures process capability, so far-out-of-limit readings from a known upstream failure distort it. Use yield to track pass/fail performance and Cpk to…Can I export test data to CSV or JSON?
Yes. The Run Explorer's Export button writes the current filtered run set to CSV (one row per run) or JSON (nested), for all visible rows or a selection.…How do I install TofuPilot behind a corporate proxy or firewall?
Allowlist tofupilot.sh on your proxy so the install script can download. Stations only need outbound HTTPS to TofuPilot; no inbound ports are required. If the…Do I need GitHub to deploy test procedures?
No. Git integration with GitHub or GitLab enables auto-deploy on every push, but you can also deploy from any machine without a connected repo using "tofupilot…How do I import STDF files into TofuPilot?
You need an STDF v4 datalog (.stdf) and a procedure in the dashboard. STDF is structured binary and requires no column mapping. Drag the .stdf file into the…Does TofuPilot integrate with my MES or ERP?
Yes, in both directions. Dashboard-side workflows push run results, serial numbers and batch data into your system, with a native Odoo integration, a generic…