Skip to content

Supported formats

Format adapters handle a few tools precisely, and only from a single direct command. Pipelines, compound commands, quoted arguments and wrappers skip the adapters because their origin is ambiguous. Every command, including those, gets the generic repeated-line reduction unless you choose the strict level.

Command What is reduced What always stays
phpunit, pest, artisan test Progress rows made only of dots with a counter Rows with F, E, S or other markers, failures, warnings, summary
phpstan analyse Progress bar rows, once an [OK] or [ERROR] verdict is present Error tables, notes, the verdict
tsc Adjacent byte-identical diagnostics, collapsed with a count Every distinct diagnostic and the total
pytest, python -m pytest Rows made only of dots with a [ NN%] counter, and PASSED lines in -v output Rows with F, E, s or x, failures, warnings, the summary
jest, vitest, npm test PASS file lines and ✓ passing-test lines, once the runner’s totals are present Failing files, ✕, ×, skipped tests, console output, the totals
Any command, standard level Runs of 3 or more identical, non-blank adjacent lines, kept once with an exact count Every distinct line, in order
Any command, similar level Runs of 4 or more adjacent lines that differ only in numbers, UUIDs or hex IDs. The first and last stay Lines mentioning errors, failures, warnings, exceptions, panics or denials. Lines without words

Other unknown output and arbitrary MCP payloads pass through unchanged. Output with terminal colour codes or carriage returns is also left alone. Observations under 2,000 characters, or where the saving would be under 256 characters, are not touched.

Claude Code and Codex merge a command’s stderr into the output Fonn reads, so those lines follow the same rules. Jest writes its whole report to stderr and is filtered for that reason. Vitest 5 prints only failures and totals when piped, so its adapter mainly helps with --reporter verbose.