Shrink huge test spaces fast
Powered by Microsoft PICT. Turn thousands of possible combinations into a compact, high-coverage test set so you can test more intelligently in less time.
Build PICT models, add constraints, generate pairwise and combinatorial test cases, and export results from a fast keyboard-driven terminal UI for Linux and Windows.
Move from test idea to high-coverage cases faster, with less manual modeling and less repetitive setup.
Powered by Microsoft PICT. Turn thousands of possible combinations into a compact, high-coverage test set so you can test more intelligently in less time.
Describe the workflow you want to test and let Claude draft parameters, values, and constraints. You review the model, then generate with PICT.
Build models, switch tabs, generate cases, and save results without leaving the keyboard. The entire workflow is optimized for fast iteration.
Export finished test cases as TXT, JSON, CSV, XLSX, or Markdown so they
are ready for spreadsheets, test management tools, reports, and automation workflows.
Turn on Ask where to save and every run ends in a small dialog where you
confirm the path and format before anything is written; paths may use
{timestamp} and a leading ~.
Use a single self-contained binary on Linux or Windows. No runtime, installer, or package manager required.
Themes, output format, and model storage settings persist automatically, so you can reopen the app and continue working without reconfiguration.
Group related parameters into sub-models with their own combination order, so tightly-coupled dimensions get deeper coverage without exploding the size of the overall test suite.
Four views of the app — click the tabs to explore each screen.
pairwise-tui ──────────────────────────────────────────────────────────────────── [1] Model [2] Options [3] Results ┌ Parameters ───────────────────────┐┌ Values: OS ──────────────────────────┐ │ > OS Windows,Linux,m...││ Comma-separated values: │ │ Browser Chrome,Firefox,S...││ Windows, Linux, macOS │ │ Language EN, DE, FR ││ │ │ ││ 3 values: Windows Linux macOS │ │ ││ │ └───────────────────────────────────┘└─────────────────────────────────────┘ ┌ Constraints ─────────────────────────────────────────────────────────────┐ │ IF [OS] = "Linux" THEN [Browser] <> "Safari"; │ └──────────────────────────────────────────────────────────────────────────┘ [a] Add [d] Del [e] Edit values [c] Constraints [b] Sub-models [g] Generate [?] Docs [q] Quit
pairwise-tui ──────────────────────────────────────────────────────────────────── [1] Model [2] Options [3] Results Output Configuration Output file path: ./results.csv Format: CSV [Enter] cycle: txt / json / csv / xlsx / md Ask where to save: ● ON [Enter] toggle PICT Options Combination order: 2 (1–6, default: 2 = pairwise) Randomize: ○ OFF [Enter] toggle Case sensitive: ○ OFF [Enter] toggle Model Storage Storage path: ./ File template: model_{timestamp} AI Settings AI Model: claude-haiku-4-5 [Enter] cycle model ──────────────────────────────────────────────────────────────────── [Tab] Next field [Esc] Unfocus [g] Generate [w] Save model [q] Quit
pairwise-tui ──────────────────────────────────────────────────────────────────── [1] Model [2] Options [3] Results ✓ 18 test cases (3 parameters — OS × Browser × Language) OS Browser Language ────────────────────────────────────── Windows Chrome EN Linux Firefox DE macOS Safari FR Windows Firefox FR Linux Chrome FR macOS Chrome DE Windows Safari DE Linux Safari EN macOS Firefox EN Windows Chrome DE Linux Firefox EN macOS Safari EN ... ──────────────────────────────────────────────────────────────────── [↑↓] Scroll [s] Save results [m] Log [t] Theme [q] Quit
pairwise-tui ──────────────────────────────────────────────────────────────────── [1] Model [2] Options [3] Results ┌───────────────────────────────────────────────────────────┐ │ AI Parameter Generator — claude-haiku-4-5 │ │ │ │ Describe your test scenario: │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Login form with email (valid/invalid/empty), │ │ │ │ password strength (weak/strong/empty), │ │ │ │ remember-me checkbox. Test on Chrome/Firefox/Edge. │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ Tip: paste a feature spec, user story, or brief desc. │ │ │ │ [Ctrl+G] Generate [F2] Setup [Esc] Cancel │ └───────────────────────────────────────────────────────────┘
Go from download to your first shareable pairwise test suite with only a few quick steps.
Head to the Releases page and grab the executable for your OS. No installer needed, no extra runtime, and no setup wizard.
On Linux, grant execute permission once:
chmod +x pairwise-tui
./pairwise-tui
Windows: double-click pairwise-tui.exe
or run it from PowerShell.
Press a to add a parameter. Enter a name (e.g. Browser),
then press Tab to move to the values field and type
comma-separated values (e.g. Chrome, Firefox, Safari).
Repeat for each dimension you want covered in the final test suite.
Press g from any tab. PICT runs immediately and the Results tab shows a compact, high-coverage pairwise test suite you can review or export.
Choose your format in Options (2 → Format field → Enter to cycle), then press s to save. Or switch on Ask where to save and confirm path and format in the dialog that opens after every g. Done.
Every action is one keypress away. Click a group to expand.
| g | Generate test cases (run PICT); opens the save dialog when Ask where to save is on |
| s | Save results to output file |
| w | Save current model to storage |
| o | Open a saved model (file picker) |
| 1 / 2 / 3 | Switch to Model / Options / Results tab |
| [ / ] | Previous / next tab (cycle) |
| t | Cycle through color themes |
| m | Open message log overlay |
| i | Open AI prompt (or AI setup if no key configured) |
| F2 | Open AI setup overlay |
| ? | Open built-in PICT documentation |
| q / Ctrl+C | Quit application |
| a | Add new parameter |
| d | Delete selected parameter |
| e | Edit values for selected parameter |
| c | Jump to constraints editor |
| x | Clear entire model (with confirmation) |
| b | Switch to sub-models panel |
| ↑ / ↓ | Navigate parameter list |
| Tab | Switch to values / constraints panel |
| Esc | Cancel / return to parameters panel |
| a | Add new sub-model |
| d | Delete selected sub-model |
| ↑ / ↓ | Navigate sub-model list |
| Esc | Return to parameters panel |
| Enter | Confirm current step (parameters or combination order) |
| ↓ | Focus parameter dropdown (parameters step) |
| Esc | Cancel and close dialog |
| Tab | Focus next field |
| Enter | Toggle or cycle current field (format, ask where to save, randomize, AI model…) |
| Esc | Unfocus current field |
| ↑ / ↓ | Scroll through test cases |
| s | Save results to file |
| ↑ / ↓ | Navigate entries / chapters |
| c (log) | Copy selected entry to clipboard |
| a (log) | Copy all log entries to clipboard |
| Ctrl+G (AI) | Generate parameters from description |
| Enter (docs/picker) | Open selected chapter / file |
| Esc / m | Close overlay |
| ↑ / ↓ (clear dialog) | Toggle between Cancel and Confirm |
| Enter (clear dialog) | Confirm selection |
| Esc (clear dialog) | Cancel clear operation |
| Enter (save dialog) | Save to the shown path and format, which become the new default |
| ↑ / ↓ (save dialog) | Cycle output format |
| Esc (save dialog) | Skip saving |
Draft test parameters faster, then review and generate with PICT.
Instead of manually listing every parameter and value, press i and describe your test scenario in plain English. The AI identifies the key test dimensions, suggests 2–6 values for each, and adds PICT constraints where logical dependencies exist.
~/.config/pairwise-tui/credentials.json
You can also set the ANTHROPIC_API_KEY environment variable — it takes precedence over the stored key.
| Model | Speed | Best for |
|---|---|---|
| claude-haiku-4-5 | Fastest ⚡ | Quick parameter sketches (default) |
| claude-sonnet-5 | Balanced | Most scenarios |
| claude-opus-5 | Thorough | Complex domain models |
Models are saved as plain-text .pictm files
compatible with the PICT engine. Each line defines a parameter with a colon-separated list
of values. Constraints use IF / THEN rules
with comparison operators, and related parameters can be grouped into sub-models with their
own combination order using { Param1, Param2 } @ N syntax.
Press w to save and o to reload.
OS: Windows, Linux, macOS Browser: Chrome, Firefox, Safari Language: EN, DE, FR APIVersion: v1, v2 IF [OS] = "Linux" THEN [Browser] <> "Safari"; IF [APIVersion] = "v1" THEN [Browser] <> "Chrome";