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.
Diagnoses non-deterministic test failures and eliminates root causes (timing, shared state, concurrency, external dependency, randomness) instead of retrying or skipping.
Investigate and fix flaky tests using Tuist CI test insights and local repeated runs. Accepts a test URL/identifier or asks to discover flaky tests, then analyzes root causes and verifies fixes with xcodebuild retries.