CLI reference #

The full command list below is generated from testerkit itself.

Installation #

pip install testerkit       # PyPI name is testerkit; the import is `testerkit`
testerkit --help

After install, testerkit is on $PATH.

Commands #

testerkit benchmark {#cli-benchmark} #

Measure this machine's per-store performance.

Argument / optionTypeDescription
--fullflagRun the full sweep (100/1k/10k unit, 1/2/4 writers)
--roundsintegerTimed rounds per case (override)
-o/--outputtextDirectory for the result folder (default: .benchmarks)
--no-saveflagPrint the summary but don't write a result folder

testerkit catalog (group) {#cli-catalog} #

Catalog commands.

testerkit catalog datasheet {#cli-catalog-datasheet} #

Generate a formatted datasheet from a catalog YAML file.

Argument / optionTypeDescription
YAML_PATHpath
-f/--format{html, pdf}Output format (default: html) (default: html)
-o/--outputpathOutput file path

testerkit daemon (group) {#cli-daemon} #

Manage TesterKit background daemons (events / runs / channels).

testerkit daemon restart {#cli-daemon-restart} #

Restart selected daemons (SIGTERM the running process; respawn on next access).

Argument / optionTypeDescription
TARGETS...text
--allflagRestart every daemon under the project

testerkit daemon status {#cli-daemon-status} #

Show running daemons, their PIDs, refs, and locations.

(no options or arguments.)

testerkit daemon stop {#cli-daemon-stop} #

Stop selected daemons without respawning.

Argument / optionTypeDescription
TARGETS...text
--allflagStop every daemon under the project

testerkit data (group) {#cli-data} #

Data retention and management.

testerkit data import {#cli-data-import} #

Merge another data_dir into this one; the store daemons rebuild from the files.

Argument / optionTypeDescription
SOURCEdirectory
--data-dirtextDestination results dir (default: configured).

testerkit data index (group) {#cli-data-index} #

Runs-index (DuckDB) epoch lifecycle tooling.

testerkit data index build {#cli-data-index-build} #

Eagerly build/warm the CURRENT runs-index epoch (blocks until warm).

Argument / optionTypeDescription
--data-dirtextResults directory
--rebuildflagDiscard the current epoch first, so it rebuilds fresh from parquet.
--backgroundflagStart the daemon and return immediately; don't block until warm.
testerkit data index list {#cli-data-index-list} #

List every runs-index epoch by fingerprint, versions, rows, size, last seen.

Argument / optionTypeDescription
--data-dirtextResults directory
testerkit data index prune {#cli-data-index-prune} #

Remove stale runs-index epochs by last-access (never the current epoch).

Argument / optionTypeDescription
--data-dirtextResults directory
--keep-lastintegerAlways keep at least this many most-recently-seen epochs. (default: 3)
--older-thantextNever remove an epoch last seen more recently than this (e.g. 30d). (default: 30d)
--dry-runflagShow what would be removed; delete nothing.
testerkit data index rm {#cli-data-index-rm} #

Delete one runs-index epoch file by fingerprint prefix.

Argument / optionTypeDescription
FINGERPRINTtext
--data-dirtextResults directory
--forceflagAlso remove the CURRENT epoch (restarts its daemon first to release the lock).

testerkit data promote {#cli-data-promote} #

Move a starter project's local runs + their referenced data to the global store.

Argument / optionTypeDescription
--include-starterflagAlso promote runs that match starter sentinels (example_part / starter_station / STARTER001 / etc.). Default skips these as throwaway learning runs.
--dry-runflagShow what would be promoted; write nothing.
--with-eventsflagAlso carry each run's session event timeline (audit-grade archive).

testerkit data prune {#cli-data-prune} #

Delete date-partitioned data older than the specified period.

Argument / optionTypeDescription
--older-thantextRetention period (e.g. 30d, 90d)
--typetextData types to prune (e.g. channels, files, events)
--data-dirtextResults directory
--dry-runflagShow what would be deleted
--exttextOnly prune files with these extensions (tiered retention, e.g. --ext tdms). Files only.

testerkit data reindex {#cli-data-reindex} #

Kill index daemons and rebuild on next access.

Argument / optionTypeDescription
--data-dirtextResults directory

testerkit discover {#cli-discover} #

Scan for available instruments.

Argument / optionTypeDescription
--visaflagVISA instruments only
--niflagNI devices only
--serialflagSerial ports only
--lxiflagLXI network instruments only
--identify/--no-identifyflagQuery *IDN? for each instrument
--jsonflagOutput as JSON

testerkit docs (group) {#cli-docs} #

Stream the shipped documentation to stdout.

testerkit docs list {#cli-docs-list} #

List available documentation pages, optionally filtered to SECTION.

Argument / optionTypeDescription
SECTIONtext

testerkit docs show {#cli-docs-show} #

Print the named documentation page to stdout.

Argument / optionTypeDescription
PATHtext

testerkit export {#cli-export} #

Export a test run or session to a different format via event replay.

Argument / optionTypeDescription
IDtext
-f/--formattextTarget format (csv, json, stdf, hdf5, tdms, mdf4)
-o/--output-dirtextOutput directory
--data-dirtextData directory

testerkit grafana (group) {#cli-grafana} #

Grafana dashboard provisioning and data server.

testerkit grafana export {#cli-grafana-export} #

Export dashboards and provisioning templates for manual setup.

Argument / optionTypeDescription
--output-dir/-opathOutput directory (default: grafana-export)

testerkit grafana serve {#cli-grafana-serve} #

Start the pgwire server for Grafana.

Argument / optionTypeDescription
--hosttextBind address (default: 0.0.0.0)
--portintegerPostgreSQL wire protocol port (default: 5433)
--data-dirpath
--refresh-secondsintegerSeconds between IPC table refreshes (events, channels) (default: 30)

testerkit grafana setup {#cli-grafana-setup} #

Install provisioning config and dashboards into Grafana.

Argument / optionTypeDescription
--grafana-homedirectoryGrafana installation directory (default: auto-detect)
--grafana-urltextGrafana URL for API setup (e.g. http://localhost:3000)
--grafana-tokentextGrafana API token or service account token
--grafana-usertextGrafana username for basic auth
--grafana-passwordtextGrafana password for basic auth
--hosttextpgwire host for datasource config (default: 127.0.0.1)
--portintegerpgwire port for datasource config (default: 5433)
--foldertextGrafana folder for dashboards (default: TesterKit)

testerkit init {#cli-init} #

Initialize a new TesterKit project.

Argument / optionTypeDescription
NAMEtext
--no-gitflagSkip git initialization
--discoverflagAuto-discover instruments and create station file
--starter/--no-starterflagGenerate starter example files (prompts if not specified)
--tier{bringup, bench, factory}Scaffold tier. 'bringup' = Tier 0/1 (MagicMock fixtures, one test, one sidecar, no station/part YAML). 'bench' = Tier 2 starter (equivalent to --starter). 'factory' = Tier 3/4 (bench + profiles).
--ai{claude-code, claude-desktop, copilot}Set up AI tool integration (MCP server + project instructions)
--no-inputflagRun non-interactively: scaffold with defaults and never prompt (skips AI setup unless --ai is given).
--no-aiflagSkip AI tool integration.
--nametextProject name (overrides auto-detect)

testerkit instrument (group) {#cli-instrument} #

Instrument management commands.

testerkit instrument cal {#cli-instrument-cal} #

Update calibration information for an instrument.

Argument / optionTypeDescription
INSTRUMENT_IDtext
--duetextCalibration due date (YYYY-MM-DD)
--lasttextLast calibration date (YYYY-MM-DD)
--certtextCertificate number
--labtextCalibration lab name

testerkit instrument list {#cli-instrument-list} #

List all instrument configuration files.

Argument / optionTypeDescription
--jsonflagOutput as JSON

testerkit instrument show {#cli-instrument-show} #

Show details for a specific instrument.

Argument / optionTypeDescription
INSTRUMENT_IDtext
--jsonflagOutput as JSON

testerkit mcp (group) {#cli-mcp} #

MCP server commands for AI-assisted workflows.

testerkit mcp serve {#cli-mcp-serve} #

Start the MCP server for AI agents.

Argument / optionTypeDescription
--transporttextTransport type (stdio, sse) (default: stdio)

testerkit metrics (group) {#cli-metrics} #

Manufacturing-test analytics (yield, pareto, ppk, trend, retest, time-loss).

testerkit metrics pareto {#cli-metrics-pareto} #

Top failures (Pareto). Group by part / step / measurement.

Argument / optionTypeDescription
--jsonflagOutput as JSON
--utcflagInterpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--stationtextStation ID
--parttextPart ID
--untiltextInclude runs started at or before this time. Same format as --since.
--sincetextInclude runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00'). Bare values are interpreted as local time unless --utc is set.
--phasetextTest phase (or 'all')
--data-dirtextResults directory
--topintegerNumber of top failures (default: 10)
--group-by{part, step, measurement}Lens for the pareto: part groups runs by uut_part_number (most-failing SKUs); step groups steps by step_path (most-failing tests); measurement groups limit-bearing measurements by name (the historical default). (default: part)

testerkit metrics ppk {#cli-metrics-ppk} #

Process performance (Ppk/Pp) per measurement.

Argument / optionTypeDescription
--jsonflagOutput as JSON
--utcflagInterpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--stationtextStation ID
--parttextPart ID
--untiltextInclude runs started at or before this time. Same format as --since.
--sincetextInclude runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00'). Bare values are interpreted as local time unless --utc is set.
--phasetextTest phase (or 'all')
--data-dirtextResults directory
--min-samplesintegerMinimum sample count (default: 10)

testerkit metrics retest {#cli-metrics-retest} #

Retest rates: how often UUTs are retried.

Argument / optionTypeDescription
--jsonflagOutput as JSON
--utcflagInterpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--stationtextStation ID
--parttextPart ID
--untiltextInclude runs started at or before this time. Same format as --since.
--sincetextInclude runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00'). Bare values are interpreted as local time unless --utc is set.
--phasetextTest phase (or 'all')
--data-dirtextResults directory
--period{day, week, month}(default: day)

testerkit metrics summary {#cli-metrics-summary} #

Yield summary: FPY, final yield, run counts, RTY, DPMO, DPPM, duration stats.

Argument / optionTypeDescription
--jsonflagOutput as JSON
--utcflagInterpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--stationtextStation ID
--parttextPart ID
--untiltextInclude runs started at or before this time. Same format as --since.
--sincetextInclude runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00'). Bare values are interpreted as local time unless --utc is set.
--phasetextTest phase (or 'all')
--data-dirtextResults directory
--period{day, week, month}(default: day)

testerkit metrics time-loss {#cli-metrics-time-loss} #

Time lost to failures and errors.

Argument / optionTypeDescription
--jsonflagOutput as JSON
--utcflagInterpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--stationtextStation ID
--parttextPart ID
--untiltextInclude runs started at or before this time. Same format as --since.
--sincetextInclude runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00'). Bare values are interpreted as local time unless --utc is set.
--phasetextTest phase (or 'all')
--data-dirtextResults directory
--period{day, week, month}(default: day)

testerkit metrics trend {#cli-metrics-trend} #

Yield trend over time.

Argument / optionTypeDescription
--jsonflagOutput as JSON
--utcflagInterpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--stationtextStation ID
--parttextPart ID
--untiltextInclude runs started at or before this time. Same format as --since.
--sincetextInclude runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00'). Bare values are interpreted as local time unless --utc is set.
--phasetextTest phase (or 'all')
--data-dirtextResults directory
--period{day, week, month}(default: day)

testerkit new-test {#cli-new-test} #

Scaffold a new test file.

Argument / optionTypeDescription
NAMEtext

testerkit runs {#cli-runs} #

List recent test runs.

Argument / optionTypeDescription
--data-dirtextResults directory
--limitintegerNumber of runs to show (default: 20)
--sincetextShow runs started at or after this time. Accepts a relative duration (e.g. '7d', '4h', '30m') or an absolute ISO date/datetime (e.g. '2024-01-01', '2024-01-01T08:00:00', '2024-01-01T08:00:00+05:00'). Bare values are interpreted as local time unless --utc is set.
--untiltextShow runs started at or before this time. Same format as --since.
--utcflagDisplay timestamps in UTC (trailing Z) and interpret bare --since/--until values as UTC. Also enabled by setting TESTERKIT_UTC=1 in the environment.
--jsonflagOutput as JSON

testerkit sbom {#cli-sbom} #

Export CycloneDX SBOM for a test run's software environment.

Argument / optionTypeDescription
RUN_IDtext
--data-dirtextResults directory
-o/--outputtextOutput file (default: stdout)

testerkit schema (group) {#cli-schema} #

JSON Schema generation for YAML validation.

testerkit schema export {#cli-schema-export} #

Export JSON Schema files for all TesterKit YAML types.

Argument / optionTypeDescription
--output-dir/-otextDirectory for .schema.json files (default: schemas)

testerkit schema refresh {#cli-schema-refresh} #

Refresh .vscode/schemas/ and .vscode/settings.json after a TesterKit upgrade.

Argument / optionTypeDescription
--project-dirtextProject root (defaults to current directory). (default: .)

testerkit serve {#cli-serve} #

Start the operator UI server.

Argument / optionTypeDescription
--hosttextHost to bind to (default: 127.0.0.1)
--portintegerPort to bind to (default: 8000)
--reloadflagEnable auto-reload for development

testerkit setup (group) {#cli-setup} #

Configure AI tool integrations.

testerkit setup claude-code {#cli-setup-claude-code} #

Configure TesterKit MCP server for Claude Code.

Argument / optionTypeDescription
--print-onlyflagPrint config instead of installing

testerkit setup claude-desktop {#cli-setup-claude-desktop} #

Configure TesterKit for Claude Desktop.

Argument / optionTypeDescription
--legacyflagUse legacy JSON config instead of .mcpb bundle
--print-onlyflagPrint config instead of installing

testerkit setup cline {#cli-setup-cline} #

Configure TesterKit MCP server for Cline (VS Code extension).

Argument / optionTypeDescription
--print-onlyflagPrint config instead of installing

testerkit setup codex {#cli-setup-codex} #

Configure TesterKit for OpenAI Codex.

Argument / optionTypeDescription
--print-onlyflagPrint config instead of installing

testerkit setup copilot {#cli-setup-copilot} #

Configure TesterKit for GitHub Copilot (VS Code + CLI).

Argument / optionTypeDescription
--print-onlyflagPrint config instead of installing

testerkit setup cursor {#cli-setup-cursor} #

Configure TesterKit for Cursor.

Argument / optionTypeDescription
--print-onlyflagPrint config instead of installing

testerkit setup show {#cli-setup-show} #

Show current MCP server configuration.

(no options or arguments.)

testerkit show {#cli-show} #

Show details for a specific test run.

Argument / optionTypeDescription
RUN_IDtext
--data-dirtextResults directory
-f/--format{html, pdf, json, csv}Generate report in format
-o/--outputtextOutput file or directory
-t/--templatetextReport template name (default: default)
--envflagShow environment snapshot
-v/--verboseflagShow each step's full step_path (and the run's parquet file) as a location locator
--utcflagDisplay timestamps in UTC (trailing Z). Also enabled by setting TESTERKIT_UTC=1 in the environment.

testerkit station (group) {#cli-station} #

Station management commands.

testerkit station init {#cli-station-init} #

Initialize a new station configuration.

Argument / optionTypeDescription
--station-idtextUnique station identifier
--nametextHuman-readable station name
--locationtextPhysical location

testerkit station update {#cli-station-update} #

Re-discover and update instrument identity in configuration.

Argument / optionTypeDescription
STATION_IDtext

testerkit station validate {#cli-station-validate} #

Validate station instruments against configuration.

Argument / optionTypeDescription
STATION_IDtext
--strictflagFail on any mismatch

testerkit validate {#cli-validate} #

Validate YAML configuration files.

Argument / optionTypeDescription
PATHS...path
--type/-t{catalog, part, station, fixture, instrument_asset, project}Explicit file type (skips auto-detection).
--jsonflagOutput as JSON

Test phase #

test_phase tags every run with the maturity tier it was produced for (development, validation, characterization, production). It lands on every parquet row so dashboards and queries can filter by phase.

Setting the phase #

Resolution order (first match wins):

  1. pytest --test-phase=<phase> — explicit per-run.
  2. TESTERKIT_TEST_PHASE env var.
  3. Defaultdevelopment when neither is set.

Git-status and mock enforcement #

Non-development phases require a clean git repository and real instruments. Uncommitted changes (or no git at all), or running with --mock-instruments, force the stamp down to development regardless of what was requested — a production-tagged row is then always reproducible from a commit hash and came from real hardware. (Profile selection still honors the requested phase; only the recorded stamp is demoted.)

Git statusRequestedStamp
Cleanvalidationvalidation
Cleanproductionproduction
Clean(none)development
Dirtyvalidationdevelopment
Dirtyproductiondevelopment
Dirty(none)development
No git(any)development
Any(any, --mock-instruments)development

Query by phase #

import duckdb
 
duckdb.sql("""
    SELECT * FROM read_parquet('data/runs/**/*.parquet')
    WHERE test_phase = 'production'
""")
 
# Exclude dev work
duckdb.sql("""
    SELECT * FROM read_parquet('data/runs/**/*.parquet')
    WHERE test_phase != 'development'
""")

See Profiles for the profile YAML shape.

Environment variables #

VariableDescription
TESTERKIT_HOMEDefault data directory. Resolution: --data-dir arg → project testerkit.yaml data_dir:TESTERKIT_HOMEplatformdirs.user_data_dir("testerkit").
TESTERKIT_FILES_BACKENDSelects the FileStore backend for captured artifacts; takes precedence over testerkit.yaml files.backend (default: local filesystem).
TESTERKIT_TEST_PHASEDefault test_phase for runs (see Test phase above).
TESTERKIT_TEST_PROFILEDefault profile name; equivalent to --test-profile.
TESTERKIT_MOCK_INSTRUMENTSSet to 1 to enable mock mode without passing --mock-instruments.
TESTERKIT_AUTO_CONFIRMTruthy → auto-resolve operator prompts and dialogs in non-tty contexts (CI, subprocess runs). Set to "confirm" to auto-confirm, "cancel" to auto-cancel; any other truthy value defaults to confirm.
TESTERKIT_SERVER_URLServer URL the dialog bridge uses to POST operator prompts from subprocess test runs back to the UI host (default: http://localhost:8000).
TESTERKIT_UUT_SERIALUUT serial. In a multi-UUT run the orchestrator sets this per site-subprocess to that site's resolved serial (see Multi-UUT testing); assign per-site serials from the CLI with --uut-serials.
TESTERKIT_UUT_PART_NUMBERDefault UUT part number (uut_part_number on every run).
TESTERKIT_UUT_REVISIONDefault UUT hardware revision.
TESTERKIT_UUT_LOT_NUMBERDefault UUT lot / batch number.
TESTERKIT_DAEMON_IDLE_TIMEOUTSeconds a background daemon (events, runs, channels) waits idle before self-shutting-down (default: 300).
TESTERKIT_DAEMON_SPAWN_TIMEOUTSeconds to wait for a daemon to report ready after spawning (default: 30).
TESTERKIT_CHANNELS_SYNC_PUSHSet to 1 to force channel-sample writes to push synchronously instead of the default async push (determinism / debugging).
TESTERKIT_SKIP_DAEMON_NOTIFYSuppresses the daemon-notify hop — useful in tooling scripts that read stored runs without serving them.

Exit codes #

CodeMeaning
0Success
1General error (invalid options, missing files, validation failures)
2Command not found / usage error (Click standard)

See also #