continuous testing for .net
auto-runs the tests your code change actually affects,
with real-time coverage and an MCP server for AI agents.
Sidekit watches your code, picks the tests your change actually affects, and runs them in parallel with live coverage feedback. AI agents get the same superpowers via MCP.
Tests run in the background as you write. No more clicking "run tests" — the loop is always closed.
A dependency graph between production and test code means only the tests your change actually affects rerun.
Line and branch coverage updated live as tests finish. No separate "coverage run" required.
Work split across processes and CPU cores. Large suites stay fast; feedback stays under a few seconds.
Pass/fail and coverage surfaced inline in VS Code as you type. The signal is right where you are.
An MCP server lets coding agents query targeted tests and coverage gaps instead of running the whole suite. Save tokens, tighten loops.
Sidekit instruments your test and production assemblies on build to track which methods every test exercises. When you save a file, Sidekit recompiles incrementally, looks up the tests that touched the changed methods, and runs just those — in parallel, across cores. Results stream back into your editor and into the MCP server in seconds.
# you save src/OrderService.cs [watch] OrderService.cs changed [graph] 3 affected tests · 2 projects [run] parallel · 4 workers ✓ OrderServiceTests.PlacingAnOrder_ChargesCard 12ms ✓ OrderServiceTests.RefundingAnOrder_RestoresInventory 18ms ✗ OrderServiceTests.CancellingAnOrder_NotifiesUser 9ms expected: NotificationSent actual: null at OrderService.cs:42 [cov] lines 84.2% (+0.6) · branches 71.8% (+1.1)
Coding agents burn tokens running dotnet test and parsing thousands of lines of output to figure out what broke. Sidekit's MCP server hands them the answer directly — just the tests that touched the file the agent is editing, plus the coverage gaps in the code it's about to change. Faster loops, fewer tokens, tighter feedback.
→ tool_call get_affected_tests { "file": "src/OrderService.cs" } ← { "tests": [ "OrderServiceTests.PlacingAnOrder_ChargesCard", "OrderServiceTests.RefundingAnOrder_RestoresInventory", "OrderServiceTests.CancellingAnOrder_NotifiesUser" ], "count": 3 } → tool_call run_tests { "filter": "affected" } ← { "passed": 2, "failed": 1, "failures": [ { "test": "CancellingAnOrder_NotifiesUser", "message": "expected NotificationSent, got null", "at": "OrderService.cs:42" } ] } → tool_call get_coverage_gaps { "file": "src/OrderService.cs" } ← { "uncovered_lines": [42, 43, 44], "uncovered_branches": 1 }