CLI reference #
The full command list below is generated from litmus itself.
Installation #
pip install litmus-test # PyPI name is litmus-test; the import is `litmus`
litmus --helpAfter install, litmus is on $PATH.
Commands #
litmus benchmark {#cli-benchmark} #
Measure this machine's per-store performance.
| Argument / option | Type | Description |
|---|---|---|
--full | flag | Run the full sweep (100/1k/10k unit, 1/2/4 writers) |
--rounds | integer | Timed rounds per case (override) |
-o/--output | text | Directory for the result folder (default: .benchmarks) |
--no-save | flag | Print the summary but don't write a result folder |
litmus catalog (group) {#cli-catalog} #
Catalog commands.
litmus catalog datasheet {#cli-catalog-datasheet} #
Generate a formatted datasheet from a catalog YAML file.
| Argument / option | Type | Description |
|---|---|---|
YAML_PATH | path | |
-f/--format | {html, pdf} | Output format (default: html) (default: html) |
-o/--output | path | Output file path |
litmus daemon (group) {#cli-daemon} #
Manage Litmus background daemons (events / runs / channels).
litmus daemon restart {#cli-daemon-restart} #
Restart selected daemons (SIGTERM the running process; respawn on next access).
| Argument / option | Type | Description |
|---|---|---|
TARGETS... | text | |
--all | flag | Restart every daemon under the project |
litmus daemon status {#cli-daemon-status} #
Show running daemons, their PIDs, refs, and locations.
(no options or arguments.)
litmus daemon stop {#cli-daemon-stop} #
Stop selected daemons without respawning.
| Argument / option | Type | Description |
|---|---|---|
TARGETS... | text | |
--all | flag | Stop every daemon under the project |
litmus data (group) {#cli-data} #
Data retention and management.
litmus data import {#cli-data-import} #
Merge another data_dir into this one; the store daemons rebuild from the files.
| Argument / option | Type | Description |
|---|---|---|
SOURCE | directory | |
--data-dir | text | Destination results dir (default: configured). |
litmus data promote {#cli-data-promote} #
Move a starter project's local runs + their referenced data to the global store.
| Argument / option | Type | Description |
|---|---|---|
--include-starter | flag | Also promote runs that match starter sentinels (example_part / starter_station / STARTER001 / etc.). Default skips these as throwaway learning runs. |
--dry-run | flag | Show what would be promoted; write nothing. |
--with-events | flag | Also carry each run's session event timeline (audit-grade archive). |
litmus data prune {#cli-data-prune} #
Delete date-partitioned data older than the specified period.
| Argument / option | Type | Description |
|---|---|---|
--older-than | text | Retention period (e.g. 30d, 90d) |
--type | text | Data types to prune (e.g. channels, files, events) |
--data-dir | text | Results directory |
--dry-run | flag | Show what would be deleted |
--ext | text | Only prune files with these extensions (tiered retention, e.g. --ext tdms). Files only. |
litmus data reindex {#cli-data-reindex} #
Kill index daemons and rebuild on next access.
| Argument / option | Type | Description |
|---|---|---|
--data-dir | text | Results directory |
litmus discover {#cli-discover} #
Scan for available instruments.
| Argument / option | Type | Description |
|---|---|---|
--visa | flag | VISA instruments only |
--ni | flag | NI devices only |
--serial | flag | Serial ports only |
--lxi | flag | LXI network instruments only |
--identify/--no-identify | flag | Query *IDN? for each instrument |
--json | flag | Output as JSON |
litmus export {#cli-export} #
Export a test run or session to a different format via event replay.
| Argument / option | Type | Description |
|---|---|---|
ID | text | |
-f/--format | text | Target format (csv, json, stdf, hdf5, tdms, mdf4) |
-o/--output-dir | text | Output directory |
--data-dir | text | Data directory |
litmus grafana (group) {#cli-grafana} #
Grafana dashboard provisioning and data server.
litmus grafana export {#cli-grafana-export} #
Export dashboards and provisioning templates for manual setup.
| Argument / option | Type | Description |
|---|---|---|
--output-dir/-o | path | Output directory (default: grafana-export) |
litmus grafana serve {#cli-grafana-serve} #
Start the pgwire server for Grafana.
| Argument / option | Type | Description |
|---|---|---|
--host | text | Bind address (default: 0.0.0.0) |
--port | integer | PostgreSQL wire protocol port (default: 5433) |
--data-dir | path | |
--refresh-seconds | integer | Seconds between IPC table refreshes (events, channels) (default: 30) |
litmus grafana setup {#cli-grafana-setup} #
Install provisioning config and dashboards into Grafana.
| Argument / option | Type | Description |
|---|---|---|
--grafana-home | directory | Grafana installation directory (default: auto-detect) |
--grafana-url | text | Grafana URL for API setup (e.g. http://localhost:3000) |
--grafana-token | text | Grafana API token or service account token |
--grafana-user | text | Grafana username for basic auth |
--grafana-password | text | Grafana password for basic auth |
--host | text | pgwire host for datasource config (default: 127.0.0.1) |
--port | integer | pgwire port for datasource config (default: 5433) |
--folder | text | Grafana folder for dashboards (default: Litmus) |
litmus init {#cli-init} #
Initialize a new Litmus project.
| Argument / option | Type | Description |
|---|---|---|
NAME | text | |
--no-git | flag | Skip git initialization |
--discover | flag | Auto-discover instruments and create station file |
--starter/--no-starter | flag | Generate 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) |
--name | text | Project name (overrides auto-detect) |
litmus instrument (group) {#cli-instrument} #
Instrument management commands.
litmus instrument cal {#cli-instrument-cal} #
Update calibration information for an instrument.
| Argument / option | Type | Description |
|---|---|---|
INSTRUMENT_ID | text | |
--due | text | Calibration due date (YYYY-MM-DD) |
--last | text | Last calibration date (YYYY-MM-DD) |
--cert | text | Certificate number |
--lab | text | Calibration lab name |
litmus instrument list {#cli-instrument-list} #
List all instrument configuration files.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
litmus instrument show {#cli-instrument-show} #
Show details for a specific instrument.
| Argument / option | Type | Description |
|---|---|---|
INSTRUMENT_ID | text | |
--json | flag | Output as JSON |
litmus mcp (group) {#cli-mcp} #
MCP server commands for AI-assisted workflows.
litmus mcp serve {#cli-mcp-serve} #
Start the MCP server for AI agents.
| Argument / option | Type | Description |
|---|---|---|
--transport | text | Transport type (stdio, sse) (default: stdio) |
litmus metrics (group) {#cli-metrics} #
Manufacturing-test analytics (yield, pareto, ppk, trend, retest, time-loss).
litmus metrics pareto {#cli-metrics-pareto} #
Top failures (Pareto). Group by part / step / measurement.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
--station | text | Station ID |
--part | text | Part ID |
--until | text | End date (ISO format) |
--since | text | Start date (ISO format) |
--phase | text | Test phase (or 'all') |
--data-dir | text | Results directory |
--top | integer | Number 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) |
litmus metrics ppk {#cli-metrics-ppk} #
Process performance (Ppk/Pp) per measurement.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
--station | text | Station ID |
--part | text | Part ID |
--until | text | End date (ISO format) |
--since | text | Start date (ISO format) |
--phase | text | Test phase (or 'all') |
--data-dir | text | Results directory |
--min-samples | integer | Minimum sample count (default: 10) |
litmus metrics retest {#cli-metrics-retest} #
Retest rates: how often UUTs are retried.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
--station | text | Station ID |
--part | text | Part ID |
--until | text | End date (ISO format) |
--since | text | Start date (ISO format) |
--phase | text | Test phase (or 'all') |
--data-dir | text | Results directory |
--period | {day, week, month} | (default: day) |
litmus metrics summary {#cli-metrics-summary} #
Yield summary: FPY, final yield, run counts, RTY, DPMO, DPPM, duration stats.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
--station | text | Station ID |
--part | text | Part ID |
--until | text | End date (ISO format) |
--since | text | Start date (ISO format) |
--phase | text | Test phase (or 'all') |
--data-dir | text | Results directory |
--period | {day, week, month} | (default: day) |
litmus metrics time-loss {#cli-metrics-time-loss} #
Time lost to failures and errors.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
--station | text | Station ID |
--part | text | Part ID |
--until | text | End date (ISO format) |
--since | text | Start date (ISO format) |
--phase | text | Test phase (or 'all') |
--data-dir | text | Results directory |
--period | {day, week, month} | (default: day) |
litmus metrics trend {#cli-metrics-trend} #
Yield trend over time.
| Argument / option | Type | Description |
|---|---|---|
--json | flag | Output as JSON |
--station | text | Station ID |
--part | text | Part ID |
--until | text | End date (ISO format) |
--since | text | Start date (ISO format) |
--phase | text | Test phase (or 'all') |
--data-dir | text | Results directory |
--period | {day, week, month} | (default: day) |
litmus new-test {#cli-new-test} #
Scaffold a new test file.
| Argument / option | Type | Description |
|---|---|---|
NAME | text |
litmus refs (group) {#cli-refs} #
Stream curated reference docs to stdout.
litmus refs list {#cli-refs-list} #
List available reference topics.
(no options or arguments.)
litmus refs show {#cli-refs-show} #
Print the named reference doc to stdout.
| Argument / option | Type | Description |
|---|---|---|
TOPIC | text |
litmus runs {#cli-runs} #
List recent test runs.
| Argument / option | Type | Description |
|---|---|---|
--data-dir | text | Results directory |
--limit | integer | Number of runs to show (default: 20) |
--json | flag | Output as JSON |
litmus sbom {#cli-sbom} #
Export CycloneDX SBOM for a test run's software environment.
| Argument / option | Type | Description |
|---|---|---|
RUN_ID | text | |
--data-dir | text | Results directory |
-o/--output | text | Output file (default: stdout) |
litmus schema (group) {#cli-schema} #
JSON Schema generation for YAML validation.
litmus schema export {#cli-schema-export} #
Export JSON Schema files for all Litmus YAML types.
| Argument / option | Type | Description |
|---|---|---|
--output-dir/-o | text | Directory for .schema.json files (default: schemas) |
litmus schema refresh {#cli-schema-refresh} #
Refresh .vscode/schemas/ and .vscode/settings.json after a Litmus upgrade.
| Argument / option | Type | Description |
|---|---|---|
--project-dir | text | Project root (defaults to current directory). (default: .) |
litmus serve {#cli-serve} #
Start the operator UI server.
| Argument / option | Type | Description |
|---|---|---|
--host | text | Host to bind to (default: 127.0.0.1) |
--port | integer | Port to bind to (default: 8000) |
--reload | flag | Enable auto-reload for development |
litmus setup (group) {#cli-setup} #
Configure AI tool integrations.
litmus setup claude-code {#cli-setup-claude-code} #
Configure Litmus MCP server for Claude Code.
| Argument / option | Type | Description |
|---|---|---|
--print-only | flag | Print config instead of installing |
litmus setup claude-desktop {#cli-setup-claude-desktop} #
Configure Litmus for Claude Desktop.
| Argument / option | Type | Description |
|---|---|---|
--legacy | flag | Use legacy JSON config instead of .mcpb bundle |
--print-only | flag | Print config instead of installing |
litmus setup cline {#cli-setup-cline} #
Configure Litmus MCP server for Cline (VS Code extension).
| Argument / option | Type | Description |
|---|---|---|
--print-only | flag | Print config instead of installing |
litmus setup copilot {#cli-setup-copilot} #
Configure Litmus for GitHub Copilot (VS Code + CLI).
| Argument / option | Type | Description |
|---|---|---|
--print-only | flag | Print config instead of installing |
litmus setup cursor {#cli-setup-cursor} #
Configure Litmus MCP server for Cursor.
| Argument / option | Type | Description |
|---|---|---|
--print-only | flag | Print config instead of installing |
litmus setup show {#cli-setup-show} #
Show current MCP server configuration.
(no options or arguments.)
litmus show {#cli-show} #
Show details for a specific test run.
| Argument / option | Type | Description |
|---|---|---|
RUN_ID | text | |
--data-dir | text | Results directory |
-f/--format | {html, pdf, json, csv} | Generate report in format |
-o/--output | text | Output file or directory |
-t/--template | text | Report template name (default: default) |
--env | flag | Show environment snapshot |
litmus station (group) {#cli-station} #
Station management commands.
litmus station init {#cli-station-init} #
Initialize a new station configuration.
| Argument / option | Type | Description |
|---|---|---|
--station-id | text | Unique station identifier |
--name | text | Human-readable station name |
--location | text | Physical location |
litmus station update {#cli-station-update} #
Re-discover and update instrument identity in configuration.
| Argument / option | Type | Description |
|---|---|---|
STATION_ID | text |
litmus station validate {#cli-station-validate} #
Validate station instruments against configuration.
| Argument / option | Type | Description |
|---|---|---|
STATION_ID | text | |
--strict | flag | Fail on any mismatch |
litmus validate {#cli-validate} #
Validate YAML configuration files.
| Argument / option | Type | Description |
|---|---|---|
PATHS... | path | |
--type/-t | {catalog, part, station, sequence, fixture, instrument_asset, project} | Explicit file type (skips auto-detection). |
--json | flag | Output 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):
pytest --test-phase=<phase>— explicit per-run.LITMUS_TEST_PHASEenv var.- Default —
developmentwhen 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 status | Requested | Stamp |
|---|---|---|
| Clean | validation | validation |
| Clean | production | production |
| Clean | (none) | development |
| Dirty | validation | development |
| Dirty | production | development |
| 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 #
| Variable | Description |
|---|---|
LITMUS_HOME | Default data directory. Resolution: --data-dir arg → project litmus.yaml data_dir: → LITMUS_HOME → platformdirs.user_data_dir("litmus"). |
LITMUS_FILES_BACKEND | Selects the FileStore backend for captured artifacts; takes precedence over litmus.yaml files.backend (default: local filesystem). |
LITMUS_TEST_PHASE | Default test_phase for runs (see Test phase above). |
LITMUS_TEST_PROFILE | Default profile name; equivalent to --test-profile. |
LITMUS_MOCK_INSTRUMENTS | Set to 1 to enable mock mode without passing --mock-instruments. |
LITMUS_AUTO_CONFIRM | Truthy → 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. |
LITMUS_SERVER_URL | Server URL the dialog bridge uses to POST operator prompts from subprocess test runs back to the UI host (default: http://localhost:8000). |
LITMUS_UUT_SERIAL | Default UUT serial (shared across slots). For per-slot serials, use LITMUS_UUT_SERIAL_<SLOT_ID> (e.g. LITMUS_UUT_SERIAL_SLOT_1). |
LITMUS_UUT_PART_NUMBER | Default UUT part number (uut_part_number on every run). |
LITMUS_UUT_REVISION | Default UUT hardware revision. |
LITMUS_UUT_LOT_NUMBER | Default UUT lot / batch number. |
LITMUS_FIXTURE_SLOT | Set by the multi-UUT orchestrator for per-slot child processes; not operator-configurable. |
LITMUS_DAEMON_IDLE_TIMEOUT | Seconds a background daemon (events, runs, channels) waits idle before self-shutting-down (default: 300). |
LITMUS_DAEMON_SPAWN_TIMEOUT | Seconds to wait for a daemon to report ready after spawning (default: 30). |
LITMUS_CHANNELS_SYNC_PUSH | Set to 1 to force channel-sample writes to push synchronously instead of the default async push (determinism / debugging). |
LITMUS_SKIP_DAEMON_NOTIFY | Suppresses the daemon-notify hop — useful in tooling scripts that read stored runs without serving them. |
Exit codes #
| Code | Meaning |
|---|---|
0 | Success |
1 | General error (invalid options, missing files, validation failures) |
2 | Command not found / usage error (Click standard) |
See also #
- Platform architecture — what each entry point owns
- MCP tools — the agent-side parallel to most
litmussubcommands - Configuration — YAML files the CLI reads
- API reference — HTTP routes the
litmus serveUI mounts