From asynkron-devtools
Handles flaky, crashing, hanging, OOM, and stack overflow errors in .NET test suites using an alternative test runner with per-test timeouts, branch isolation, history tracking, and regression detection.
How this skill is triggered — by the user, by Claude, or both
Slash command
/asynkron-devtools:testrunner [filter pattern or path][filter pattern or path]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
This tool requires .NET 10+ SDK (for `dnx` support).
This tool requires .NET 10+ SDK (for dnx support).
Check if dnx is available:
dnx --help
If dnx is not available, the user needs .NET 10 SDK or later. dnx ships with the SDK — it does not need separate installation.
Asynkron.TestRunner is an alternative .NET test runner that wraps dotnet test with added resilience:
This is NOT a replacement for dotnet test. Use it only when standard tooling fails — flaky suites, hanging tests, crashes, OOM, stack overflow, or when you need isolation and regression tracking.
dnx runs .NET tools from source without installing them, similar to npx:
dnx Asynkron.TestRunner [arguments]
On first run, dnx will prompt to download the package. Use --yes to skip the prompt in CI.
Run all tests with hang detection:
dnx Asynkron.TestRunner
Filter by class or namespace:
dnx Asynkron.TestRunner "MyTestClass"
dnx Asynkron.TestRunner "MyNamespace.Integration"
Custom dotnet test command:
dnx Asynkron.TestRunner -- dotnet test ./tests/MyProject
List tests without running:
dnx Asynkron.TestRunner list
View test history and trends:
dnx Asynkron.TestRunner stats
Compare last two runs for regressions:
dnx Asynkron.TestRunner regressions
Manual isolation (find the culprit test):
dnx Asynkron.TestRunner isolate
Clear all history:
dnx Asynkron.TestRunner clear
| Flag | Default | Purpose |
|---|---|---|
-t, --timeout <seconds> | 20 (run), 30 (isolate) | Per-test timeout |
--timeout 0 | — | Disable hang detection |
-p, --parallel [N] | — | Run N test batches concurrently |
--parallel (no value) | — | Auto-detect and use CPU core count |
When a hang is detected:
This catches tests that hang, crash the process, cause OOM, or stack overflow — scenarios where dotnet test simply dies or never returns.
History is stored in .testrunner/ directory, indexed by:
Different filters and repos maintain independent histories for accurate regression detection.
Use Asynkron.TestRunner instead of dotnet test when:
For normal, healthy test suites — just use dotnet test.
dotnet test first — only reach for testrunner when it failsisolate to pinpoint the exact test causing crashes or hangsstats and regressions to track flaky test patterns over time--parallel for faster isolation on large test suitesnpx claudepluginhub asynkron/asynkron-skills --plugin asynkron-devtoolsMeasuring test effectiveness. Coverlet code coverage, Stryker.NET mutation testing, flaky detection.
Statically reviews .NET test suites for false confidence: assertion-free tests, over-mocking, coverage theater, weak isolation, flaky patterns, and missing negative/security tests across xUnit, NUnit, MSTest.
Diagnoses non-deterministic test failures and eliminates root causes (timing, shared state, concurrency, external dependency, randomness) instead of retrying or skipping.