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) — capture errors w/o waiting forever $ zerotest --timeout 5000 python manage.py runserver # Help / version $ zerotest -h $ zerotest -v
--timeout <ms> kills the process after N ms and returns diagnostics so far.
Default 120s. Useful for servers that print errors but never exit.
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
}
}
]
}