Stop the moment something breaks
Add --ff and sumlyzer stops scheduling new workspaces the moment one fails. The behavior requested from npm itself, years before it ever landed.
Everything still lands in one table
Every workspace's stats are collected into a single table at the end.
| workspace | status | duration | tests | pass | fail |
|---|---|---|---|---|---|
| contact | PASS | 20.5s | 35 | 35 | 0 |
| scanner | PASS | 10.1s | 162 | 161 | 0 |
| tree-walker | FAIL | 2.7s | 26 | 25 | 1 |
| conformance | PASS | 1.1s | 35 | 35 | 0 |
| github | PASS | 4.7s | 8 | 8 | 0 |
| gitlab | PASS | 2.6s | 8 | 8 | 0 |
| + 7 more workspaces | |||||
i skipped tests: scanner (1)
1/13 workspace(s) failed: tree-walker
Parallèle execution
-c, --concurrency <n> runs up to n
workspaces' scripts at the same time, something npm doesn't do natively.
Measured on a real 15-workspace monorepo: ~3.5x faster at concurrency 8, output interleaved as each workspace finishes.
Rerun what's changed
--changed run workspace that owns every file in your git diff
The git ref auto-detects: uncommitted changes diff against HEAD,
a clean branch diffs against its upstream merge-base.
In your CI, pass --ref for a custom target branch.
Turn long logs into a short CI job page
--junit <path> merges every workspace's JUnit output into one aggregated report, each
<testsuite> prefixed by workspace name. GitLab, Jenkins,
Azure DevOps all read it the same way.
On GitHub Actions, group each workspace's output in a collapsible element.
Exit code is 1 on any failure, 0
otherwise. No output parsing required.
Watch mode
Today, --changed only runs the workspaces your diff touches
directly. Watch mode will walk the full workspace dependency graph with a topological
sort, so a change in core automatically re-runs everything
downstream that depends on it, in the right order.
A change in core ripples downstream, in topological order
MCP server
Sumlyzer will ship as an MCP server, so an LLM agent can call it as a tool, running fail-fast mode on any npm workspaces project directly from the chat.
✓ contact
✗ tree-walker failed (exit code 1)
stopped scheduling, result returned to agent
All flags
| Flag | Default | Description |
|---|---|---|
| --script <name> | test | npm script to run per workspace |
| --ff | off | fail fast: stop at the first failing workspace |
| --junit <path> | off | write an aggregated JUnit XML report to <path> |
| -c, --concurrency <n> | 1 | run up to <n> workspaces at once |
| --changed | off | only run workspaces with changed files |
| --ref <ref> | auto-detect | git ref to diff against for --changed |
| -h, --help | print usage |
Stop paying full price for a one-line fix.
Drop sumlyzer into any npm workspaces project in under a minute.