Compiler noise
→ structured JSON.
ZeroTest runs any command and translates errors into clean, machine-readable diagnostics. File paths, line numbers, severity, error codes — all in one JSON payload.
/ features
8 languages
Python, Go, TypeScript, JavaScript, Rust, C/C++, Java, Ruby. Each with format-specific parsers.
CLI + MCP
Use from your terminal or plug into any MCP-compatible agent. Same binary, two modes.
Auto-detect
Language and toolchain detected from the command name and output. Override with hints when needed.
Single binary
Go. No runtime deps. Drop it in your path and go. Mac, Linux, Windows.
/ languages
Add a language → contributing guide
/ install
No notarization, no fees — grab the binary straight from the terminal.
Or download with curl:
# macOS / Linux curl -sL https://github.com/scopophobic/ZeroTest/releases/latest/download/zerotest-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') -o /usr/local/bin/zerotest && chmod +x /usr/local/bin/zerotest # Windows (PowerShell) curl -sL https://github.com/scopophobic/ZeroTest/releases/latest/download/zerotest-windows-amd64.exe -o zerotest.exe
/ usage
Run any command. JSON goes to stdout. Exit code matches the wrapped command.
# Run a type check $ zerotest python -m mypy src/app.py # Build check $ zerotest go build ./... # Lint $ zerotest tsc --noEmit # Compile $ zerotest gcc main.c -o main # Long-running (e.g. Django) — see output live, ^C to get JSON $ zerotest --live python manage.py runserver # Or with a timer $ zerotest --timeout 5000 python manage.py runserver # Help / version $ zerotest -h $ zerotest -v
--live shows child output in real-time (JSON goes to stderr).
--timeout <ms> auto-kills after N ms.
Default 120s. Press Ctrl+C to interrupt any running command.
Run with no arguments to start the MCP server. Then configure your client.
# Start server $ zerotest
Claude Desktop config:
{
"mcpServers": {
"zerotest": {
"command": "/path/to/zerotest",
"args": []
}
}
}
Example response
{
"ok": false,
"runtime_metadata": {
"language": "python",
"toolchain": "mypy",
"execution_time_ms": 14,
"exit_code": 1
},
"diagnostics": [
{
"code": "DT_PY_OPERATOR",
"severity": "error",
"message": "Unsupported operand types",
"location": {
"file": "src/app.py",
"line": 42,
"column": 18
}
}
]
}