Your agent reads the whole build log. Almost none of it matters.
DotnetTokenKiller runs dotnet for you and hands back only the errors, warnings, and summary. Same information, 60–90% fewer tokens.
Restore complete (0.7s)
SampleApp.Tests net10.0 succeeded (0.4s) → bin\Debug\net10.0\...dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a
[xUnit.net 00:00:00.17] Discovering: SampleApp.Tests
[xUnit.net 00:00:00.28] Discovered: SampleApp.Tests
[xUnit.net 00:00:00.34] Starting: SampleApp.Tests
Warning:
The component "Fluent Assertions" is governed by the rules
defined in the Xceed License Agreement and the Xceed Fluent
Assertions Community License. You may use Fluent Assertions
... 7 more lines of licence notice
[xUnit.net 00:00:00.48] IntentionallyFailingTests.AlwaysFails [FAIL]
[xUnit.net 00:00:00.48] Intentional failure
[xUnit.net 00:00:00.48] Stack Trace:
[xUnit.net 00:00:00.49] D:\DotnetTokenKiller\samples\SampleApp
.Tests\IntentionallyFailingTests.cs(8,0)
[xUnit.net 00:00:00.49] at System.Reflection.MethodBaseInvoker
[xUnit.net 00:00:00.49] at System.Reflection.MethodBaseInvoker
[xUnit.net 00:00:00.56] Finished: SampleApp.Tests
SampleApp.Tests test net10.0 failed with 1 error(s) (0.5s)
D:\DotnetTokenKiller\samples\...cs(8): error TESTERROR:
... 8 more lines repeating the same stack trace
Test summary: total: 4, failed: 1, succeeded: 3, skipped: 0
Build failed with 1 error(s) in 5.4s
FAILURES (1): SampleApp.Tests.IntentionallyFailingTests.AlwaysFails [5 ms] Intentional failure at samples/SampleApp.Tests/IntentionallyFailingTests.cs:line 8 dotnet test: 1 failed, 3 passed (1 project, 0.07s)
Everything dimmed on the left is discarded. The adapter banner, the licence notice, the reflection frames, and the duplicated stack trace carry no information your agent can act on — so dtk drops them and keeps the failure, the message, and the file it came from.
dotnet tool install -g DotnetTokenKiller
- 78%
- build
- 84%
- test
- 98%
- clean
- 81%
- list package
What gets filtered
Each command has its own filter, because each one is noisy in its own way.
build
Drops MSBuild headers and progress lines. Groups the remaining errors and warnings by file, with workspace-relative paths and a count of the most common codes.
test
Removes xUnit, NUnit, MSTest, and Reqnroll adapter banners, licence notices, and reflection stack frames. Passing tests collapse to a count; failures keep their message and source line.
restore & clean
Condenses per-project restore and clean chatter to one line, or to the errors when something goes wrong.
format
Prints only the violations, one per line, with paths relative to the workspace instead of absolute.
list package
Collapses the per-framework duplication that --outdated, --deprecated, and --vulnerable produce.
pipe
Runs the same filters over output dtk did not produce — a CI log, or a dotnet call that slipped past the hook.
Set up your coding agent
One command installs a hook that rewrites dotnet … to dtk dotnet …, so the filtering happens whether or not the agent remembers to ask for it.
dtk init claude